Files

1 line
164 KiB
JSON

{"repo": "bobo541574/lumina-rag", "files": {"config/rag.php": {"a816621b953c926982391d448ca42fdbe51cd561": {"t": 1785745782.3290846, "n": 6694, "h": "514716e1bbbdd229", "c": "<?php\n\ndeclare(strict_types=1);\nuse Modules\\SettingsModule\\Models\\AiModel;\n\n/**\n * RAG Configuration\n *\n * Central configuration file for the RAG (Retrieval-Augmented Generation)\n * system. All settings are read via env() with sensible defaults, allowing\n * overrides through environment variables prefixed with RAG_.\n *\n * Configuration sections:\n * - embedding: Provider, model, dimensions, batch size, cache TTL, timeout\n * - llm: Provider, model, context/max tokens, timeout\n * - vector_store: Driver selection and index parameters\n * - search: Mode (hybrid/vector), top K, similarity threshold, query expansion, MMR\n * - chunking: Chunk size and overlap for document processing\n * - chat: Max question length and messages per session\n * - pagination: Per-page limits for API responses\n * - logging: Log channel for RAG-specific logging\n *\n * @see AiModel For per-model overrides in the database\n */\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Embedding Configuration\n |--------------------------------------------------------------------------\n */\n 'embedding' => [\n 'provider' => env('RAG_EMBEDDING_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_EMBEDDING_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_EMBEDDING_MODEL', 'nomic-embed-text:latest'),\n 'dimensions' => (int) env('RAG_EMBEDDING_DIMENSIONS', 768),\n 'batch_size' => (int) env('RAG_EMBEDDING_BATCH_SIZE', 100),\n 'cache_ttl' => (int) env('RAG_EMBEDDING_CACHE_TTL', 86400),\n 'timeout' => (int) env('RAG_EMBEDDING_TIMEOUT', 30),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | LLM Configuration\n |--------------------------------------------------------------------------\n */\n 'llm' => [\n 'provider' => env('RAG_LLM_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_LLM_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_LLM_MODEL', 'qwen3.5:9b'),\n 'max_context_tokens' => (int) env('RAG_LLM_MAX_CONTEXT_TOKENS', 32768),\n 'max_tokens' => (int) env('RAG_LLM_MAX_TOKENS', 4096),\n 'temperature' => (float) env('RAG_LLM_TEMPERATURE', 0.3),\n 'timeout' => (int) env('RAG_LLM_TIMEOUT', 120),\n\n // Provider-specific API keys (used by ProviderFactory fallback)\n 'gemini_api_key' => env('GEMINI_API_KEY'),\n 'claude_api_key' => env('CLAUDE_API_KEY'),\n 'deepseek_api_key' => env('DEEPSEEK_API_KEY'),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Vector Store Configuration\n |--------------------------------------------------------------------------\n */\n 'vector_store' => [\n 'driver' => env('RAG_VECTOR_DRIVER', 'pgsql'),\n 'index_lists' => (int) env('RAG_VECTOR_INDEX_LISTS', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Search Configuration\n |--------------------------------------------------------------------------\n */\n 'search' => [\n 'mode' => env('RAG_SEARCH_MODE', 'hybrid'),\n 'top_k' => (int) env('RAG_SEARCH_TOP_K', 5),\n 'similarity_threshold' => (float) env('RAG_SEARCH_SIMILARITY_THRESHOLD', 0.65),\n // Floor passed to the vector store on every search; the elbow method\n // then finds the natural cutoff above this value.\n 'min_initial_threshold' => (float) env('RAG_SEARCH_MIN_INITIAL_THRESHOLD', 0.20),\n // Reciprocal Rank Fusion rank constant (k in 1/(k+rank)).\n 'rrf_k' => (int) env('RAG_SEARCH_RRF_K', 60),\n 'threshold' => [\n // Minimum gap between consecutive scores to trigger the elbow cut.\n 'gap_significance' => (float) env('RAG_THRESHOLD_GAP_SIGNIFICANCE', 0.15),\n // Base threshold used when user/project/date filters narrow the search.\n 'filtered_base' => (float) env('RAG_THRESHOLD_FILTERED_BASE', 0.45),\n // Scales the top score when no significant gap is found.\n 'score_scaling' => (float) env('RAG_THRESHOLD_SCORE_SCALING', 0.85),\n // Minimum top-score required to return a single fallback chunk.\n 'fallback_min' => (float) env('RAG_THRESHOLD_FALLBACK_MIN', 0.25),\n ],\n 'query_expansion' => [\n 'enabled' => (bool) env('RAG_QUERY_EXPANSION_ENABLED', false),\n 'num_queries' => (int) env('RAG_QUERY_EXPANSION_NUM_QUERIES', 3),\n ],\n 'query_rewriter' => [\n 'enabled' => (bool) env('RAG_QUERY_REWRITER_ENABLED', true),\n 'complexity_threshold' => (int) env('RAG_QUERY_REWRITER_COMPLEXITY_THRESHOLD', 5),\n ],\n 'mmr' => [\n 'enabled' => (bool) env('RAG_SEARCH_MMR_ENABLED', true),\n 'lambda' => (float) env('RAG_SEARCH_MMR_LAMBDA', 0.7),\n ],\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chunking Configuration\n |--------------------------------------------------------------------------\n */\n 'chunking' => [\n 'chunk_size' => (int) env('RAG_CHUNK_SIZE', 1000),\n 'overlap' => (int) env('RAG_CHUNK_OVERLAP', 200),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chat Configuration\n |--------------------------------------------------------------------------\n */\n 'chat' => [\n 'max_question_length' => (int) env('RAG_MAX_QUESTION_LENGTH', 1000),\n 'max_messages_per_session' => (int) env('RAG_MAX_MESSAGES_PER_SESSION', 100),\n // Hours of inactivity before a session is considered expired.\n 'session_timeout_hours' => (int) env('RAG_SESSION_TIMEOUT_HOURS', 24),\n // Number of prior message pairs injected as conversation history for LLM context.\n 'history_window' => (int) env('RAG_CHAT_HISTORY_WINDOW', 4),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Pagination Configuration\n |--------------------------------------------------------------------------\n */\n 'pagination' => [\n 'per_page' => (int) env('RAG_PAGINATION_PER_PAGE', 20),\n 'max_per_page' => (int) env('RAG_PAGINATION_MAX_PER_PAGE', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Logging Configuration\n |--------------------------------------------------------------------------\n */\n 'logging' => [\n 'channel' => env('RAG_LOG_CHANNEL', 'rag'),\n ],\n\n];\n"}, "fa0e3c2e26a06e07d24fe040c1e78fbefa19488a": {"t": 1785756479.4315462, "n": 6694, "h": "514716e1bbbdd229", "c": "<?php\n\ndeclare(strict_types=1);\nuse Modules\\SettingsModule\\Models\\AiModel;\n\n/**\n * RAG Configuration\n *\n * Central configuration file for the RAG (Retrieval-Augmented Generation)\n * system. All settings are read via env() with sensible defaults, allowing\n * overrides through environment variables prefixed with RAG_.\n *\n * Configuration sections:\n * - embedding: Provider, model, dimensions, batch size, cache TTL, timeout\n * - llm: Provider, model, context/max tokens, timeout\n * - vector_store: Driver selection and index parameters\n * - search: Mode (hybrid/vector), top K, similarity threshold, query expansion, MMR\n * - chunking: Chunk size and overlap for document processing\n * - chat: Max question length and messages per session\n * - pagination: Per-page limits for API responses\n * - logging: Log channel for RAG-specific logging\n *\n * @see AiModel For per-model overrides in the database\n */\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Embedding Configuration\n |--------------------------------------------------------------------------\n */\n 'embedding' => [\n 'provider' => env('RAG_EMBEDDING_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_EMBEDDING_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_EMBEDDING_MODEL', 'nomic-embed-text:latest'),\n 'dimensions' => (int) env('RAG_EMBEDDING_DIMENSIONS', 768),\n 'batch_size' => (int) env('RAG_EMBEDDING_BATCH_SIZE', 100),\n 'cache_ttl' => (int) env('RAG_EMBEDDING_CACHE_TTL', 86400),\n 'timeout' => (int) env('RAG_EMBEDDING_TIMEOUT', 30),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | LLM Configuration\n |--------------------------------------------------------------------------\n */\n 'llm' => [\n 'provider' => env('RAG_LLM_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_LLM_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_LLM_MODEL', 'qwen3.5:9b'),\n 'max_context_tokens' => (int) env('RAG_LLM_MAX_CONTEXT_TOKENS', 32768),\n 'max_tokens' => (int) env('RAG_LLM_MAX_TOKENS', 4096),\n 'temperature' => (float) env('RAG_LLM_TEMPERATURE', 0.3),\n 'timeout' => (int) env('RAG_LLM_TIMEOUT', 120),\n\n // Provider-specific API keys (used by ProviderFactory fallback)\n 'gemini_api_key' => env('GEMINI_API_KEY'),\n 'claude_api_key' => env('CLAUDE_API_KEY'),\n 'deepseek_api_key' => env('DEEPSEEK_API_KEY'),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Vector Store Configuration\n |--------------------------------------------------------------------------\n */\n 'vector_store' => [\n 'driver' => env('RAG_VECTOR_DRIVER', 'pgsql'),\n 'index_lists' => (int) env('RAG_VECTOR_INDEX_LISTS', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Search Configuration\n |--------------------------------------------------------------------------\n */\n 'search' => [\n 'mode' => env('RAG_SEARCH_MODE', 'hybrid'),\n 'top_k' => (int) env('RAG_SEARCH_TOP_K', 5),\n 'similarity_threshold' => (float) env('RAG_SEARCH_SIMILARITY_THRESHOLD', 0.65),\n // Floor passed to the vector store on every search; the elbow method\n // then finds the natural cutoff above this value.\n 'min_initial_threshold' => (float) env('RAG_SEARCH_MIN_INITIAL_THRESHOLD', 0.20),\n // Reciprocal Rank Fusion rank constant (k in 1/(k+rank)).\n 'rrf_k' => (int) env('RAG_SEARCH_RRF_K', 60),\n 'threshold' => [\n // Minimum gap between consecutive scores to trigger the elbow cut.\n 'gap_significance' => (float) env('RAG_THRESHOLD_GAP_SIGNIFICANCE', 0.15),\n // Base threshold used when user/project/date filters narrow the search.\n 'filtered_base' => (float) env('RAG_THRESHOLD_FILTERED_BASE', 0.45),\n // Scales the top score when no significant gap is found.\n 'score_scaling' => (float) env('RAG_THRESHOLD_SCORE_SCALING', 0.85),\n // Minimum top-score required to return a single fallback chunk.\n 'fallback_min' => (float) env('RAG_THRESHOLD_FALLBACK_MIN', 0.25),\n ],\n 'query_expansion' => [\n 'enabled' => (bool) env('RAG_QUERY_EXPANSION_ENABLED', false),\n 'num_queries' => (int) env('RAG_QUERY_EXPANSION_NUM_QUERIES', 3),\n ],\n 'query_rewriter' => [\n 'enabled' => (bool) env('RAG_QUERY_REWRITER_ENABLED', true),\n 'complexity_threshold' => (int) env('RAG_QUERY_REWRITER_COMPLEXITY_THRESHOLD', 5),\n ],\n 'mmr' => [\n 'enabled' => (bool) env('RAG_SEARCH_MMR_ENABLED', true),\n 'lambda' => (float) env('RAG_SEARCH_MMR_LAMBDA', 0.7),\n ],\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chunking Configuration\n |--------------------------------------------------------------------------\n */\n 'chunking' => [\n 'chunk_size' => (int) env('RAG_CHUNK_SIZE', 1000),\n 'overlap' => (int) env('RAG_CHUNK_OVERLAP', 200),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chat Configuration\n |--------------------------------------------------------------------------\n */\n 'chat' => [\n 'max_question_length' => (int) env('RAG_MAX_QUESTION_LENGTH', 1000),\n 'max_messages_per_session' => (int) env('RAG_MAX_MESSAGES_PER_SESSION', 100),\n // Hours of inactivity before a session is considered expired.\n 'session_timeout_hours' => (int) env('RAG_SESSION_TIMEOUT_HOURS', 24),\n // Number of prior message pairs injected as conversation history for LLM context.\n 'history_window' => (int) env('RAG_CHAT_HISTORY_WINDOW', 4),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Pagination Configuration\n |--------------------------------------------------------------------------\n */\n 'pagination' => [\n 'per_page' => (int) env('RAG_PAGINATION_PER_PAGE', 20),\n 'max_per_page' => (int) env('RAG_PAGINATION_MAX_PER_PAGE', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Logging Configuration\n |--------------------------------------------------------------------------\n */\n 'logging' => [\n 'channel' => env('RAG_LOG_CHANNEL', 'rag'),\n ],\n\n];\n"}, "f01478d9e52cb720f4674096844edf16a6aafa03": {"t": 1785756480.7549486, "n": 5360, "h": "3221cf35567ed034", "c": "<?php\n\ndeclare(strict_types=1);\nuse Modules\\SettingsModule\\Models\\AiModel;\n\n/**\n * RAG Configuration\n *\n * Central configuration file for the RAG (Retrieval-Augmented Generation)\n * system. All settings are read via env() with sensible defaults, allowing\n * overrides through environment variables prefixed with RAG_.\n *\n * Configuration sections:\n * - embedding: Provider, model, dimensions, batch size, cache TTL, timeout\n * - llm: Provider, model, context/max tokens, timeout\n * - vector_store: Driver selection and index parameters\n * - search: Mode (hybrid/vector), top K, similarity threshold, query expansion, MMR\n * - chunking: Chunk size and overlap for document processing\n * - chat: Max question length and messages per session\n * - pagination: Per-page limits for API responses\n * - logging: Log channel for RAG-specific logging\n *\n * @see AiModel For per-model overrides in the database\n */\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Embedding Configuration\n |--------------------------------------------------------------------------\n */\n 'embedding' => [\n 'provider' => env('RAG_EMBEDDING_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_EMBEDDING_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_EMBEDDING_MODEL', 'nomic-embed-text:latest'),\n 'dimensions' => (int) env('RAG_EMBEDDING_DIMENSIONS', 768),\n 'batch_size' => (int) env('RAG_EMBEDDING_BATCH_SIZE', 100),\n 'cache_ttl' => (int) env('RAG_EMBEDDING_CACHE_TTL', 86400),\n 'timeout' => (int) env('RAG_EMBEDDING_TIMEOUT', 30),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | LLM Configuration\n |--------------------------------------------------------------------------\n */\n 'llm' => [\n 'provider' => env('RAG_LLM_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_LLM_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_LLM_MODEL', 'qwen3.5:9b'),\n 'max_context_tokens' => (int) env('RAG_LLM_MAX_CONTEXT_TOKENS', 32768),\n 'max_tokens' => (int) env('RAG_LLM_MAX_TOKENS', 4096),\n 'temperature' => (float) env('RAG_LLM_TEMPERATURE', 0.3),\n 'timeout' => (int) env('RAG_LLM_TIMEOUT', 120),\n\n // Provider-specific API keys (used by ProviderFactory fallback)\n 'gemini_api_key' => env('GEMINI_API_KEY'),\n 'claude_api_key' => env('CLAUDE_API_KEY'),\n 'deepseek_api_key' => env('DEEPSEEK_API_KEY'),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Vector Store Configuration\n |--------------------------------------------------------------------------\n */\n 'vector_store' => [\n 'driver' => env('RAG_VECTOR_DRIVER', 'pgsql'),\n 'index_lists' => (int) env('RAG_VECTOR_INDEX_LISTS', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Search Configuration\n |--------------------------------------------------------------------------\n */\n 'search' => [\n 'mode' => env('RAG_SEARCH_MODE', 'hybrid'),\n 'top_k' => (int) env('RAG_SEARCH_TOP_K', 5),\n 'similarity_threshold' => (float) env('RAG_SEARCH_SIMILARITY_THRESHOLD', 0.65),\n 'query_expansion' => [\n 'enabled' => (bool) env('RAG_QUERY_EXPANSION_ENABLED', false),\n 'num_queries' => (int) env('RAG_QUERY_EXPANSION_NUM_QUERIES', 3),\n ],\n 'query_rewriter' => [\n 'enabled' => (bool) env('RAG_QUERY_REWRITER_ENABLED', true),\n 'complexity_threshold' => (int) env('RAG_QUERY_REWRITER_COMPLEXITY_THRESHOLD', 5),\n ],\n 'mmr' => [\n 'enabled' => (bool) env('RAG_SEARCH_MMR_ENABLED', true),\n 'lambda' => (float) env('RAG_SEARCH_MMR_LAMBDA', 0.7),\n ],\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chunking Configuration\n |--------------------------------------------------------------------------\n */\n 'chunking' => [\n 'chunk_size' => (int) env('RAG_CHUNK_SIZE', 1000),\n 'overlap' => (int) env('RAG_CHUNK_OVERLAP', 200),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chat Configuration\n |--------------------------------------------------------------------------\n */\n 'chat' => [\n 'max_question_length' => (int) env('RAG_MAX_QUESTION_LENGTH', 1000),\n 'max_messages_per_session' => (int) env('RAG_MAX_MESSAGES_PER_SESSION', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Pagination Configuration\n |--------------------------------------------------------------------------\n */\n 'pagination' => [\n 'per_page' => (int) env('RAG_PAGINATION_PER_PAGE', 20),\n 'max_per_page' => (int) env('RAG_PAGINATION_MAX_PER_PAGE', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Logging Configuration\n |--------------------------------------------------------------------------\n */\n 'logging' => [\n 'channel' => env('RAG_LOG_CHANNEL', 'rag'),\n ],\n\n];\n"}, "ee6efe0494d1674181a26fbc220d70ae973fab6d": {"t": 1785756482.051362, "n": 5151, "h": "9a03e31d40c25a01", "c": "<?php\n\ndeclare(strict_types=1);\nuse Modules\\SettingsModule\\Models\\AiModel;\n\n/**\n * RAG Configuration\n *\n * Central configuration file for the RAG (Retrieval-Augmented Generation)\n * system. All settings are read via env() with sensible defaults, allowing\n * overrides through environment variables prefixed with RAG_.\n *\n * Configuration sections:\n * - embedding: Provider, model, dimensions, batch size, cache TTL, timeout\n * - llm: Provider, model, context/max tokens, timeout\n * - vector_store: Driver selection and index parameters\n * - search: Mode (hybrid/vector), top K, similarity threshold, query expansion, MMR\n * - chunking: Chunk size and overlap for document processing\n * - chat: Max question length and messages per session\n * - pagination: Per-page limits for API responses\n * - logging: Log channel for RAG-specific logging\n *\n * @see AiModel For per-model overrides in the database\n */\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Embedding Configuration\n |--------------------------------------------------------------------------\n */\n 'embedding' => [\n 'provider' => env('RAG_EMBEDDING_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_EMBEDDING_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_EMBEDDING_MODEL', 'nomic-embed-text:latest'),\n 'dimensions' => (int) env('RAG_EMBEDDING_DIMENSIONS', 768),\n 'batch_size' => (int) env('RAG_EMBEDDING_BATCH_SIZE', 100),\n 'cache_ttl' => (int) env('RAG_EMBEDDING_CACHE_TTL', 86400),\n 'timeout' => (int) env('RAG_EMBEDDING_TIMEOUT', 30),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | LLM Configuration\n |--------------------------------------------------------------------------\n */\n 'llm' => [\n 'provider' => env('RAG_LLM_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_LLM_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_LLM_MODEL', 'qwen3.5:9b'),\n 'max_context_tokens' => (int) env('RAG_LLM_MAX_CONTEXT_TOKENS', 32768),\n 'max_tokens' => (int) env('RAG_LLM_MAX_TOKENS', 4096),\n 'temperature' => (float) env('RAG_LLM_TEMPERATURE', 0.3),\n 'timeout' => (int) env('RAG_LLM_TIMEOUT', 120),\n\n // Provider-specific API keys (used by ProviderFactory fallback)\n 'gemini_api_key' => env('GEMINI_API_KEY'),\n 'claude_api_key' => env('CLAUDE_API_KEY'),\n 'deepseek_api_key' => env('DEEPSEEK_API_KEY'),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Vector Store Configuration\n |--------------------------------------------------------------------------\n */\n 'vector_store' => [\n 'driver' => env('RAG_VECTOR_DRIVER', 'pgsql'),\n 'index_lists' => (int) env('RAG_VECTOR_INDEX_LISTS', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Search Configuration\n |--------------------------------------------------------------------------\n */\n 'search' => [\n 'mode' => env('RAG_SEARCH_MODE', 'hybrid'),\n 'top_k' => (int) env('RAG_SEARCH_TOP_K', 5),\n 'similarity_threshold' => (float) env('RAG_SEARCH_SIMILARITY_THRESHOLD', 0.65),\n 'query_expansion' => [\n 'enabled' => (bool) env('RAG_QUERY_EXPANSION_ENABLED', false),\n 'num_queries' => (int) env('RAG_QUERY_EXPANSION_NUM_QUERIES', 3),\n ],\n 'mmr' => [\n 'enabled' => (bool) env('RAG_SEARCH_MMR_ENABLED', true),\n 'lambda' => (float) env('RAG_SEARCH_MMR_LAMBDA', 0.7),\n ],\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chunking Configuration\n |--------------------------------------------------------------------------\n */\n 'chunking' => [\n 'chunk_size' => (int) env('RAG_CHUNK_SIZE', 1000),\n 'overlap' => (int) env('RAG_CHUNK_OVERLAP', 200),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chat Configuration\n |--------------------------------------------------------------------------\n */\n 'chat' => [\n 'max_question_length' => (int) env('RAG_MAX_QUESTION_LENGTH', 1000),\n 'max_messages_per_session' => (int) env('RAG_MAX_MESSAGES_PER_SESSION', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Pagination Configuration\n |--------------------------------------------------------------------------\n */\n 'pagination' => [\n 'per_page' => (int) env('RAG_PAGINATION_PER_PAGE', 20),\n 'max_per_page' => (int) env('RAG_PAGINATION_MAX_PER_PAGE', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Logging Configuration\n |--------------------------------------------------------------------------\n */\n 'logging' => [\n 'channel' => env('RAG_LOG_CHANNEL', 'rag'),\n ],\n\n];\n"}, "fbc84d66e0fdb2f33ea923cd82afa20ab190ac47": {"t": 1785756485.4389083, "n": 5085, "h": "5e8ce359878e9f93", "c": "<?php\n\ndeclare(strict_types=1);\nuse Modules\\SettingsModule\\Models\\AiModel;\n\n/**\n * RAG Configuration\n *\n * Central configuration file for the RAG (Retrieval-Augmented Generation)\n * system. All settings are read via env() with sensible defaults, allowing\n * overrides through environment variables prefixed with RAG_.\n *\n * Configuration sections:\n * - embedding: Provider, model, dimensions, batch size, cache TTL, timeout\n * - llm: Provider, model, context/max tokens, timeout\n * - vector_store: Driver selection and index parameters\n * - search: Mode (hybrid/vector), top K, similarity threshold, query expansion, MMR\n * - chunking: Chunk size and overlap for document processing\n * - chat: Max question length and messages per session\n * - pagination: Per-page limits for API responses\n * - logging: Log channel for RAG-specific logging\n *\n * @see AiModel For per-model overrides in the database\n */\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Embedding Configuration\n |--------------------------------------------------------------------------\n */\n 'embedding' => [\n 'provider' => env('RAG_EMBEDDING_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_EMBEDDING_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_EMBEDDING_MODEL', 'nomic-embed-text:latest'),\n 'dimensions' => (int) env('RAG_EMBEDDING_DIMENSIONS', 768),\n 'batch_size' => (int) env('RAG_EMBEDDING_BATCH_SIZE', 100),\n 'cache_ttl' => (int) env('RAG_EMBEDDING_CACHE_TTL', 86400),\n 'timeout' => (int) env('RAG_EMBEDDING_TIMEOUT', 30),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | LLM Configuration\n |--------------------------------------------------------------------------\n */\n 'llm' => [\n 'provider' => env('RAG_LLM_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_LLM_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_LLM_MODEL', 'qwen3.5:9b'),\n 'max_context_tokens' => (int) env('RAG_LLM_MAX_CONTEXT_TOKENS', 32768),\n 'max_tokens' => (int) env('RAG_LLM_MAX_TOKENS', 4096),\n 'timeout' => (int) env('RAG_LLM_TIMEOUT', 120),\n\n // Provider-specific API keys (used by ProviderFactory fallback)\n 'gemini_api_key' => env('GEMINI_API_KEY'),\n 'claude_api_key' => env('CLAUDE_API_KEY'),\n 'deepseek_api_key' => env('DEEPSEEK_API_KEY'),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Vector Store Configuration\n |--------------------------------------------------------------------------\n */\n 'vector_store' => [\n 'driver' => env('RAG_VECTOR_DRIVER', 'pgsql'),\n 'index_lists' => (int) env('RAG_VECTOR_INDEX_LISTS', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Search Configuration\n |--------------------------------------------------------------------------\n */\n 'search' => [\n 'mode' => env('RAG_SEARCH_MODE', 'hybrid'),\n 'top_k' => (int) env('RAG_SEARCH_TOP_K', 5),\n 'similarity_threshold' => (float) env('RAG_SEARCH_SIMILARITY_THRESHOLD', 0.65),\n 'query_expansion' => [\n 'enabled' => (bool) env('RAG_QUERY_EXPANSION_ENABLED', false),\n 'num_queries' => (int) env('RAG_QUERY_EXPANSION_NUM_QUERIES', 3),\n ],\n 'mmr' => [\n 'enabled' => (bool) env('RAG_SEARCH_MMR_ENABLED', true),\n 'lambda' => (float) env('RAG_SEARCH_MMR_LAMBDA', 0.7),\n ],\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chunking Configuration\n |--------------------------------------------------------------------------\n */\n 'chunking' => [\n 'chunk_size' => (int) env('RAG_CHUNK_SIZE', 1000),\n 'overlap' => (int) env('RAG_CHUNK_OVERLAP', 200),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chat Configuration\n |--------------------------------------------------------------------------\n */\n 'chat' => [\n 'max_question_length' => (int) env('RAG_MAX_QUESTION_LENGTH', 1000),\n 'max_messages_per_session' => (int) env('RAG_MAX_MESSAGES_PER_SESSION', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Pagination Configuration\n |--------------------------------------------------------------------------\n */\n 'pagination' => [\n 'per_page' => (int) env('RAG_PAGINATION_PER_PAGE', 20),\n 'max_per_page' => (int) env('RAG_PAGINATION_MAX_PER_PAGE', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Logging Configuration\n |--------------------------------------------------------------------------\n */\n 'logging' => [\n 'channel' => env('RAG_LOG_CHANNEL', 'rag'),\n ],\n\n];\n"}, "f86df8fa62be97d69c083f898c6e13e2432a7f12": {"t": 1785756486.7378883, "n": 4842, "h": "bbb96028f53d1092", "c": "<?php\n\ndeclare(strict_types=1);\n\n/**\n * RAG Configuration\n *\n * Central configuration file for the RAG (Retrieval-Augmented Generation)\n * system. All settings are read via env() with sensible defaults, allowing\n * overrides through environment variables prefixed with RAG_.\n *\n * Configuration sections:\n * - embedding: Provider, model, dimensions, batch size, cache TTL, timeout\n * - llm: Provider, model, context/max tokens, timeout\n * - vector_store: Driver selection and index parameters\n * - search: Mode (hybrid/vector), top K, similarity threshold, query expansion, MMR\n * - chunking: Chunk size and overlap for document processing\n * - chat: Max question length and messages per session\n * - pagination: Per-page limits for API responses\n * - logging: Log channel for RAG-specific logging\n *\n * @see \\Modules\\SettingsModule\\Models\\AiModel For per-model overrides in the database\n */\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Embedding Configuration\n |--------------------------------------------------------------------------\n */\n 'embedding' => [\n 'provider' => env('RAG_EMBEDDING_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_EMBEDDING_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_EMBEDDING_MODEL', 'nomic-embed-text:latest'),\n 'dimensions' => (int) env('RAG_EMBEDDING_DIMENSIONS', 768),\n 'batch_size' => (int) env('RAG_EMBEDDING_BATCH_SIZE', 100),\n 'cache_ttl' => (int) env('RAG_EMBEDDING_CACHE_TTL', 86400),\n 'timeout' => (int) env('RAG_EMBEDDING_TIMEOUT', 30),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | LLM Configuration\n |--------------------------------------------------------------------------\n */\n 'llm' => [\n 'provider' => env('RAG_LLM_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_LLM_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_LLM_MODEL', 'qwen3.5:9b'),\n 'max_context_tokens' => (int) env('RAG_LLM_MAX_CONTEXT_TOKENS', 32768),\n 'max_tokens' => (int) env('RAG_LLM_MAX_TOKENS', 4096),\n 'timeout' => (int) env('RAG_LLM_TIMEOUT', 120),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Vector Store Configuration\n |--------------------------------------------------------------------------\n */\n 'vector_store' => [\n 'driver' => env('RAG_VECTOR_DRIVER', 'pgsql'),\n 'index_lists' => (int) env('RAG_VECTOR_INDEX_LISTS', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Search Configuration\n |--------------------------------------------------------------------------\n */\n 'search' => [\n 'mode' => env('RAG_SEARCH_MODE', 'hybrid'),\n 'top_k' => (int) env('RAG_SEARCH_TOP_K', 5),\n 'similarity_threshold' => (float) env('RAG_SEARCH_SIMILARITY_THRESHOLD', 0.65),\n 'query_expansion' => [\n 'enabled' => (bool) env('RAG_QUERY_EXPANSION_ENABLED', false),\n 'num_queries' => (int) env('RAG_QUERY_EXPANSION_NUM_QUERIES', 3),\n ],\n 'mmr' => [\n 'enabled' => (bool) env('RAG_SEARCH_MMR_ENABLED', true),\n 'lambda' => (float) env('RAG_SEARCH_MMR_LAMBDA', 0.7),\n ],\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chunking Configuration\n |--------------------------------------------------------------------------\n */\n 'chunking' => [\n 'chunk_size' => (int) env('RAG_CHUNK_SIZE', 1000),\n 'overlap' => (int) env('RAG_CHUNK_OVERLAP', 200),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chat Configuration\n |--------------------------------------------------------------------------\n */\n 'chat' => [\n 'max_question_length' => (int) env('RAG_MAX_QUESTION_LENGTH', 1000),\n 'max_messages_per_session' => (int) env('RAG_MAX_MESSAGES_PER_SESSION', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Pagination Configuration\n |--------------------------------------------------------------------------\n */\n 'pagination' => [\n 'per_page' => (int) env('RAG_PAGINATION_PER_PAGE', 20),\n 'max_per_page' => (int) env('RAG_PAGINATION_MAX_PER_PAGE', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Logging Configuration\n |--------------------------------------------------------------------------\n */\n 'logging' => [\n 'channel' => env('RAG_LOG_CHANNEL', 'rag'),\n ],\n\n];\n"}, "a58cedfdec67bebd550fc1245380cb659890223a": {"t": 1785756487.946973, "n": 3610, "h": "126b97de874985aa", "c": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Embedding Configuration\n |--------------------------------------------------------------------------\n */\n 'embedding' => [\n 'provider' => env('RAG_EMBEDDING_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_EMBEDDING_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_EMBEDDING_MODEL', 'nomic-embed-text:latest'),\n 'dimensions' => (int) env('RAG_EMBEDDING_DIMENSIONS', 768),\n 'batch_size' => (int) env('RAG_EMBEDDING_BATCH_SIZE', 100),\n 'cache_ttl' => (int) env('RAG_EMBEDDING_CACHE_TTL', 86400),\n 'timeout' => (int) env('RAG_EMBEDDING_TIMEOUT', 30),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | LLM Configuration\n |--------------------------------------------------------------------------\n */\n 'llm' => [\n 'provider' => env('RAG_LLM_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_LLM_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_LLM_MODEL', 'qwen3.5:9b'),\n 'max_context_tokens' => (int) env('RAG_LLM_MAX_CONTEXT_TOKENS', 32768),\n 'max_tokens' => (int) env('RAG_LLM_MAX_TOKENS', 4096),\n 'timeout' => (int) env('RAG_LLM_TIMEOUT', 120),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Vector Store Configuration\n |--------------------------------------------------------------------------\n */\n 'vector_store' => [\n 'driver' => env('RAG_VECTOR_DRIVER', 'pgsql'),\n 'index_lists' => (int) env('RAG_VECTOR_INDEX_LISTS', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Search Configuration\n |--------------------------------------------------------------------------\n */\n 'search' => [\n 'mode' => env('RAG_SEARCH_MODE', 'hybrid'),\n 'top_k' => (int) env('RAG_SEARCH_TOP_K', 5),\n 'similarity_threshold' => (float) env('RAG_SEARCH_SIMILARITY_THRESHOLD', 0.65),\n 'query_expansion' => [\n 'enabled' => (bool) env('RAG_QUERY_EXPANSION_ENABLED', false),\n 'num_queries' => (int) env('RAG_QUERY_EXPANSION_NUM_QUERIES', 3),\n ],\n 'mmr' => [\n 'enabled' => (bool) env('RAG_SEARCH_MMR_ENABLED', true),\n 'lambda' => (float) env('RAG_SEARCH_MMR_LAMBDA', 0.7),\n ],\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chunking Configuration\n |--------------------------------------------------------------------------\n */\n 'chunking' => [\n 'chunk_size' => (int) env('RAG_CHUNK_SIZE', 1000),\n 'overlap' => (int) env('RAG_CHUNK_OVERLAP', 200),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chat Configuration\n |--------------------------------------------------------------------------\n */\n 'chat' => [\n 'max_question_length' => (int) env('RAG_MAX_QUESTION_LENGTH', 1000),\n 'max_messages_per_session' => (int) env('RAG_MAX_MESSAGES_PER_SESSION', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Logging Configuration\n |--------------------------------------------------------------------------\n */\n 'logging' => [\n 'channel' => env('RAG_LOG_CHANNEL', 'rag'),\n ],\n\n];\n"}, "1d3bcc6568f9f777159637f03a718f85023bf740": {"t": 1785756489.2810268, "n": 3547, "h": "26cf53bf4cf65e16", "c": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Embedding Configuration\n |--------------------------------------------------------------------------\n */\n 'embedding' => [\n 'provider' => env('RAG_EMBEDDING_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_EMBEDDING_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_EMBEDDING_MODEL', 'nomic-embed-text:latest'),\n 'dimensions' => (int) env('RAG_EMBEDDING_DIMENSIONS', 768),\n 'batch_size' => (int) env('RAG_EMBEDDING_BATCH_SIZE', 100),\n 'cache_ttl' => (int) env('RAG_EMBEDDING_CACHE_TTL', 86400),\n 'timeout' => (int) env('RAG_EMBEDDING_TIMEOUT', 30),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | LLM Configuration\n |--------------------------------------------------------------------------\n */\n 'llm' => [\n 'provider' => env('RAG_LLM_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_LLM_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_LLM_MODEL', 'qwen3.5:9b'),\n 'max_context_tokens' => (int) env('RAG_LLM_MAX_CONTEXT_TOKENS', 32768),\n 'timeout' => (int) env('RAG_LLM_TIMEOUT', 120),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Vector Store Configuration\n |--------------------------------------------------------------------------\n */\n 'vector_store' => [\n 'driver' => env('RAG_VECTOR_DRIVER', 'pgsql'),\n 'index_lists' => (int) env('RAG_VECTOR_INDEX_LISTS', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Search Configuration\n |--------------------------------------------------------------------------\n */\n 'search' => [\n 'mode' => env('RAG_SEARCH_MODE', 'hybrid'),\n 'top_k' => (int) env('RAG_SEARCH_TOP_K', 5),\n 'similarity_threshold' => (float) env('RAG_SEARCH_SIMILARITY_THRESHOLD', 0.65),\n 'query_expansion' => [\n 'enabled' => (bool) env('RAG_QUERY_EXPANSION_ENABLED', false),\n 'num_queries' => (int) env('RAG_QUERY_EXPANSION_NUM_QUERIES', 3),\n ],\n 'mmr' => [\n 'enabled' => (bool) env('RAG_SEARCH_MMR_ENABLED', true),\n 'lambda' => (float) env('RAG_SEARCH_MMR_LAMBDA', 0.7),\n ],\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chunking Configuration\n |--------------------------------------------------------------------------\n */\n 'chunking' => [\n 'chunk_size' => (int) env('RAG_CHUNK_SIZE', 1000),\n 'overlap' => (int) env('RAG_CHUNK_OVERLAP', 200),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chat Configuration\n |--------------------------------------------------------------------------\n */\n 'chat' => [\n 'max_question_length' => (int) env('RAG_MAX_QUESTION_LENGTH', 1000),\n 'max_messages_per_session' => (int) env('RAG_MAX_MESSAGES_PER_SESSION', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Logging Configuration\n |--------------------------------------------------------------------------\n */\n 'logging' => [\n 'channel' => env('RAG_LOG_CHANNEL', 'rag'),\n ],\n\n];\n"}, "70419b84f518306114c0093bd903521601949e2c": {"t": 1785756491.5512357, "n": 3857, "h": "f0850df8adea7317", "c": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Embedding Configuration\n |--------------------------------------------------------------------------\n */\n 'embedding' => [\n 'provider' => env('RAG_EMBEDDING_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_EMBEDDING_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_EMBEDDING_MODEL', 'nomic-embed-text:latest'),\n 'dimensions' => (int) env('RAG_EMBEDDING_DIMENSIONS', 768),\n 'batch_size' => (int) env('RAG_EMBEDDING_BATCH_SIZE', 100),\n 'cache_ttl' => (int) env('RAG_EMBEDDING_CACHE_TTL', 86400),\n 'timeout' => (int) env('RAG_EMBEDDING_TIMEOUT', 30),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | LLM Configuration\n |--------------------------------------------------------------------------\n */\n 'llm' => [\n 'provider' => env('RAG_LLM_PROVIDER', 'ollama'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_LLM_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_LLM_MODEL', 'qwen3.5:9b'),\n 'temperature' => (float) env('RAG_LLM_TEMPERATURE', 0.3),\n 'max_context_tokens' => (int) env('RAG_LLM_MAX_CONTEXT_TOKENS', 32768),\n 'timeout' => (int) env('RAG_LLM_TIMEOUT', 120),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Vector Store Configuration\n |--------------------------------------------------------------------------\n */\n 'vector_store' => [\n 'driver' => env('RAG_VECTOR_DRIVER', 'pgsql'),\n 'index_lists' => (int) env('RAG_VECTOR_INDEX_LISTS', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Search Configuration\n |--------------------------------------------------------------------------\n */\n 'search' => [\n 'mode' => env('RAG_SEARCH_MODE', 'hybrid'),\n 'top_k' => (int) env('RAG_SEARCH_TOP_K', 5),\n 'similarity_threshold' => (float) env('RAG_SEARCH_SIMILARITY_THRESHOLD', 0.65),\n 'hybrid' => [\n 'vector_weight' => (float) env('RAG_SEARCH_HYBRID_VECTOR_WEIGHT', 0.7),\n 'fts_weight' => (float) env('RAG_SEARCH_HYBRID_FTS_WEIGHT', 0.3),\n ],\n 'query_expansion' => [\n 'enabled' => (bool) env('RAG_QUERY_EXPANSION_ENABLED', false),\n 'num_queries' => (int) env('RAG_QUERY_EXPANSION_NUM_QUERIES', 3),\n ],\n 'mmr' => [\n 'enabled' => (bool) env('RAG_SEARCH_MMR_ENABLED', true),\n 'lambda' => (float) env('RAG_SEARCH_MMR_LAMBDA', 0.7),\n ],\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chunking Configuration\n |--------------------------------------------------------------------------\n */\n 'chunking' => [\n 'chunk_size' => (int) env('RAG_CHUNK_SIZE', 1000),\n 'overlap' => (int) env('RAG_CHUNK_OVERLAP', 200),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chat Configuration\n |--------------------------------------------------------------------------\n */\n 'chat' => [\n 'max_question_length' => (int) env('RAG_MAX_QUESTION_LENGTH', 1000),\n 'max_messages_per_session' => (int) env('RAG_MAX_MESSAGES_PER_SESSION', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Logging Configuration\n |--------------------------------------------------------------------------\n */\n 'logging' => [\n 'channel' => env('RAG_LOG_CHANNEL', 'rag'),\n 'level' => env('RAG_LOG_LEVEL', 'info'),\n ],\n\n];\n"}, "26cb6bc5bbc752fad9d768aeca431b06cd58b3a8": {"t": 1785756492.8857567, "n": 3851, "h": "74252b32970e8628", "c": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Embedding Configuration\n |--------------------------------------------------------------------------\n */\n 'embedding' => [\n 'provider' => env('RAG_EMBEDDING_PROVIDER', 'openai'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_EMBEDDING_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_EMBEDDING_MODEL', 'text-embedding-3-small'),\n 'dimensions' => (int) env('RAG_EMBEDDING_DIMENSIONS', 1536),\n 'batch_size' => (int) env('RAG_EMBEDDING_BATCH_SIZE', 100),\n 'cache_ttl' => (int) env('RAG_EMBEDDING_CACHE_TTL', 86400),\n 'timeout' => (int) env('RAG_EMBEDDING_TIMEOUT', 30),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | LLM Configuration\n |--------------------------------------------------------------------------\n */\n 'llm' => [\n 'provider' => env('RAG_LLM_PROVIDER', 'openai'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_LLM_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_LLM_MODEL', 'gpt-4o'),\n 'temperature' => (float) env('RAG_LLM_TEMPERATURE', 0.3),\n 'max_context_tokens' => (int) env('RAG_LLM_MAX_CONTEXT_TOKENS', 4000),\n 'timeout' => (int) env('RAG_LLM_TIMEOUT', 60),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Vector Store Configuration\n |--------------------------------------------------------------------------\n */\n 'vector_store' => [\n 'driver' => env('RAG_VECTOR_DRIVER', 'pgsql'),\n 'index_lists' => (int) env('RAG_VECTOR_INDEX_LISTS', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Search Configuration\n |--------------------------------------------------------------------------\n */\n 'search' => [\n 'mode' => env('RAG_SEARCH_MODE', 'hybrid'),\n 'top_k' => (int) env('RAG_SEARCH_TOP_K', 5),\n 'similarity_threshold' => (float) env('RAG_SEARCH_SIMILARITY_THRESHOLD', 0.65),\n 'hybrid' => [\n 'vector_weight' => (float) env('RAG_SEARCH_HYBRID_VECTOR_WEIGHT', 0.7),\n 'fts_weight' => (float) env('RAG_SEARCH_HYBRID_FTS_WEIGHT', 0.3),\n ],\n 'query_expansion' => [\n 'enabled' => (bool) env('RAG_QUERY_EXPANSION_ENABLED', false),\n 'num_queries' => (int) env('RAG_QUERY_EXPANSION_NUM_QUERIES', 3),\n ],\n 'mmr' => [\n 'enabled' => (bool) env('RAG_SEARCH_MMR_ENABLED', true),\n 'lambda' => (float) env('RAG_SEARCH_MMR_LAMBDA', 0.7),\n ],\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chunking Configuration\n |--------------------------------------------------------------------------\n */\n 'chunking' => [\n 'chunk_size' => (int) env('RAG_CHUNK_SIZE', 1000),\n 'overlap' => (int) env('RAG_CHUNK_OVERLAP', 200),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chat Configuration\n |--------------------------------------------------------------------------\n */\n 'chat' => [\n 'max_question_length' => (int) env('RAG_MAX_QUESTION_LENGTH', 1000),\n 'max_messages_per_session' => (int) env('RAG_MAX_MESSAGES_PER_SESSION', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Logging Configuration\n |--------------------------------------------------------------------------\n */\n 'logging' => [\n 'channel' => env('RAG_LOG_CHANNEL', 'rag'),\n 'level' => env('RAG_LOG_LEVEL', 'info'),\n ],\n\n];\n"}, "9b398d20586a3efe01abe06fcf530cd215a8f51b": {"t": 1785756494.0342445, "n": 3243, "h": "e97dff5b9d9ab241", "c": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Embedding Configuration\n |--------------------------------------------------------------------------\n */\n 'embedding' => [\n 'provider' => env('RAG_EMBEDDING_PROVIDER', 'openai'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_EMBEDDING_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_EMBEDDING_MODEL', 'text-embedding-ada-002'),\n 'dimensions' => (int) env('RAG_EMBEDDING_DIMENSIONS', 1536),\n 'batch_size' => (int) env('RAG_EMBEDDING_BATCH_SIZE', 100),\n 'cache_ttl' => (int) env('RAG_EMBEDDING_CACHE_TTL', 86400),\n 'timeout' => (int) env('RAG_EMBEDDING_TIMEOUT', 30),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | LLM Configuration\n |--------------------------------------------------------------------------\n */\n 'llm' => [\n 'provider' => env('RAG_LLM_PROVIDER', 'openai'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_LLM_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_LLM_MODEL', 'gpt-4o'),\n 'temperature' => (float) env('RAG_LLM_TEMPERATURE', 0.3),\n 'max_context_tokens' => (int) env('RAG_LLM_MAX_CONTEXT_TOKENS', 4000),\n 'timeout' => (int) env('RAG_LLM_TIMEOUT', 60),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Vector Store Configuration\n |--------------------------------------------------------------------------\n */\n 'vector_store' => [\n 'driver' => env('RAG_VECTOR_DRIVER', 'pgsql'),\n 'index_lists' => (int) env('RAG_VECTOR_INDEX_LISTS', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Search Configuration\n |--------------------------------------------------------------------------\n */\n 'search' => [\n 'top_k' => (int) env('RAG_SEARCH_TOP_K', 5),\n 'similarity_threshold' => (float) env('RAG_SEARCH_SIMILARITY_THRESHOLD', 0.50),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chunking Configuration\n |--------------------------------------------------------------------------\n */\n 'chunking' => [\n 'chunk_size' => (int) env('RAG_CHUNK_SIZE', 1000),\n 'overlap' => (int) env('RAG_CHUNK_OVERLAP', 200),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chat Configuration\n |--------------------------------------------------------------------------\n */\n 'chat' => [\n 'max_question_length' => (int) env('RAG_MAX_QUESTION_LENGTH', 1000),\n 'max_messages_per_session' => (int) env('RAG_MAX_MESSAGES_PER_SESSION', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Logging Configuration\n |--------------------------------------------------------------------------\n */\n 'logging' => [\n 'channel' => env('RAG_LOG_CHANNEL', 'rag'),\n 'level' => env('RAG_LOG_LEVEL', 'info'),\n ],\n\n];\n"}, "5cfb95f7575659e54a7c5449d08284d90080ec91": {"t": 1785756495.2421608, "n": 2913, "h": "df283c6f195b41b3", "c": "<?php\n\ndeclare(strict_types=1);\n\nreturn [\n\n /*\n |--------------------------------------------------------------------------\n | Embedding Configuration\n |--------------------------------------------------------------------------\n */\n 'embedding' => [\n 'provider' => env('RAG_EMBEDDING_PROVIDER', 'openai'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_EMBEDDING_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_EMBEDDING_MODEL', 'text-embedding-ada-002'),\n 'dimensions' => (int) env('RAG_EMBEDDING_DIMENSIONS', 1536),\n 'batch_size' => (int) env('RAG_EMBEDDING_BATCH_SIZE', 100),\n 'cache_ttl' => (int) env('RAG_EMBEDDING_CACHE_TTL', 86400),\n 'timeout' => (int) env('RAG_EMBEDDING_TIMEOUT', 30),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | LLM Configuration\n |--------------------------------------------------------------------------\n */\n 'llm' => [\n 'provider' => env('RAG_LLM_PROVIDER', 'openai'),\n 'api_key' => env('OPENAI_API_KEY'),\n 'base_url' => env('RAG_LLM_BASE_URL', 'http://localhost:11434'),\n 'model' => env('RAG_LLM_MODEL', 'gpt-4o'),\n 'temperature' => (float) env('RAG_LLM_TEMPERATURE', 0.3),\n 'max_context_tokens' => (int) env('RAG_LLM_MAX_CONTEXT_TOKENS', 4000),\n 'timeout' => (int) env('RAG_LLM_TIMEOUT', 60),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Vector Store Configuration\n |--------------------------------------------------------------------------\n */\n 'vector_store' => [\n 'driver' => env('RAG_VECTOR_DRIVER', 'pgsql'),\n 'index_lists' => (int) env('RAG_VECTOR_INDEX_LISTS', 100),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Search Configuration\n |--------------------------------------------------------------------------\n */\n 'search' => [\n 'top_k' => (int) env('RAG_SEARCH_TOP_K', 5),\n 'similarity_threshold' => (float) env('RAG_SEARCH_SIMILARITY_THRESHOLD', 0.65),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chunking Configuration\n |--------------------------------------------------------------------------\n */\n 'chunking' => [\n 'chunk_size' => (int) env('RAG_CHUNK_SIZE', 1000),\n 'overlap' => (int) env('RAG_CHUNK_OVERLAP', 200),\n ],\n\n /*\n |--------------------------------------------------------------------------\n | Chat Configuration\n |--------------------------------------------------------------------------\n */\n 'chat' => [\n 'max_question_length' => (int) env('RAG_MAX_QUESTION_LENGTH', 1000),\n 'max_messages_per_session' => (int) env('RAG_MAX_MESSAGES_PER_SESSION', 100),\n ],\n\n];\n"}}, "modules/SettingsModule/database/Seeders/SettingsModuleSeeder.php": {"a816621b953c926982391d448ca42fdbe51cd561": {"t": 1785745785.1915338, "n": 12003, "h": "9e69514425243cf8", "c": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Modules\\SettingsModule\\Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Modules\\SettingsModule\\Models\\AiModel;\nuse Modules\\SettingsModule\\Models\\TermAlias;\n\n/**\n * Settings Module Seeder\n *\n * Seeds the database with default AI model configurations and term alias\n * mappings required for the RAG pipeline to function out of the box.\n * Populates embedding models (nomic, mxbai, MiniLM), LLM models (Qwen,\n * Gemma, Qwen Coder), and a curated set of Burmese→English term aliases.\n *\n * Uses updateOrCreate to be idempotent — safe to run multiple times without\n * creating duplicate entries, and updates existing records with latest defaults.\n * The seeder is organized into embedding model\n * seeding, LLM model seeding, and term alias seeding.\n */\nclass SettingsModuleSeeder extends Seeder\n{\n /**\n * Run the database seeders\n *\n * Seeds embedding models (3 defaults), LLM models (4 defaults), and\n * term aliases (18 mappings covering project names, technical terms,\n * and abbreviations). Each seed uses updateOrCreate to ensure idempotency.\n */\n public function run(): void\n {\n $embeddingModels = [\n [\n 'name' => 'nomic-embed-text',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'nomic-embed-text:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Fast general-purpose embedding (768d). Good balance of speed and quality for most documents.',\n ],\n [\n 'name' => 'mxbai-embed-large',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mxbai-embed-large:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 1024,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'High-quality embedding (1024d). Better accuracy than nomic for nuanced retrieval.',\n ],\n [\n 'name' => 'all-MiniLM-L6-v2',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mahonzhan/all-MiniLM-L6-v2:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 384,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Lightweight embedding (384d). Fastest option, good for high-throughput or simple queries.',\n ],\n [\n 'name' => 'text-embedding-004',\n 'type' => 'embedding',\n 'provider' => 'gemini',\n 'model' => 'text-embedding-004',\n 'base_url' => 'https://generativelanguage.googleapis.com/v1beta',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Google Gemini embedding (768d). High-quality multilingual embeddings via Google API.',\n ],\n ];\n\n $llmModels = [\n [\n 'name' => 'Qwen 3.5 (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen3.5:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.1,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Strong general-purpose 9B model with 32K context. Good reasoning and instruction following.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Qwen 3.5 Claude Opus (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'sorc/qwen3.5-claude-4.6-opus:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'Qwen 3.5 finetuned with Claude-style responses. Creative and detailed answers.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Gemma 4 (e4b)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'gemma4:e4b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.1,\n 'max_context_tokens' => 16384,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Google Gemma 4 — efficient 16K context, low temperature for focused concise answers.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Qwen 2.5 Coder',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen2.5-coder:latest',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.2,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Code-specialized 32K context model. Best for technical documents and code analysis.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Claude Sonnet 4.5',\n 'type' => 'llm',\n 'provider' => 'claude',\n 'model' => 'claude-sonnet-4-5-20250929',\n 'temperature' => 0.3,\n 'max_context_tokens' => 200000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 5,\n 'description' => 'Anthropic Claude Sonnet 4.5 — 200K context, strong reasoning, best-in-class accuracy.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('CLAUDE_API_KEY'),\n ],\n [\n 'name' => 'DeepSeek Chat',\n 'type' => 'llm',\n 'provider' => 'deepseek',\n 'model' => 'deepseek-chat',\n 'temperature' => 0.3,\n 'max_context_tokens' => 128000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 6,\n 'description' => 'DeepSeek Chat — 128K context, cost-effective, strong reasoning and coding.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('DEEPSEEK_API_KEY'),\n ],\n [\n 'name' => 'Gemini 2.5 Flash',\n 'type' => 'llm',\n 'provider' => 'gemini',\n 'model' => 'gemini-2.5-flash',\n 'temperature' => 0.3,\n 'max_context_tokens' => 1048576,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 7,\n 'description' => 'Google Gemini 2.5 Flash — 1M context, fast and cost-effective multimodal.',\n 'settings' => ['max_tokens' => 8192],\n 'api_key' => env('GEMINI_API_KEY'),\n ],\n [\n 'name' => 'GPT-4o',\n 'type' => 'llm',\n 'provider' => 'openai',\n 'model' => 'gpt-4o',\n 'temperature' => 0.3,\n 'max_context_tokens' => 128000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 8,\n 'description' => 'OpenAI GPT-4o — 128K context, multimodal, strong general-purpose reasoning.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('OPENAI_API_KEY'),\n ],\n ];\n\n foreach ($embeddingModels as $model) {\n AiModel::updateOrCreate(\n ['type' => 'embedding', 'model' => $model['model']],\n $model,\n );\n }\n\n foreach ($llmModels as $model) {\n AiModel::updateOrCreate(\n ['type' => 'llm', 'model' => $model['model']],\n $model,\n );\n }\n\n $this->seedTermAliases();\n }\n\n /**\n * Seed term alias mappings\n *\n * Inserts a curated set of Burmese→English term aliases for project names\n * (Orion, Nova, Apex, etc.), technical terms (CNN, API, database, etc.),\n * and general abbreviations (OR→Orion, NV→Nova).\n * Each entry uses firstOrCreate keyed by (alias, canonical) for idempotency.\n */\n private function seedTermAliases(): void\n {\n $aliases = [\n ['type' => 'project', 'alias' => 'အိုရီယွန်', 'canonical' => 'Orion', 'description' => 'Project name: Orion in Burmese'],\n ['type' => 'project', 'alias' => 'အော်ရီယွန်', 'canonical' => 'Orion', 'description' => 'Project name: Orion alternative spelling'],\n ['type' => 'project', 'alias' => 'နိုဗာ', 'canonical' => 'Nova', 'description' => 'Project name: Nova in Burmese'],\n ['type' => 'project', 'alias' => 'အေပက်စ်', 'canonical' => 'Apex', 'description' => 'Project name: Apex in Burmese'],\n ['type' => 'project', 'alias' => 'ဟီလိယပ်', 'canonical' => 'Helios', 'description' => 'Project name: Helios in Burmese'],\n ['type' => 'project', 'alias' => 'အက်တလပ်', 'canonical' => 'Atlas', 'description' => 'Project name: Atlas in Burmese'],\n ['type' => 'project', 'alias' => 'ဖျူးရှင်း', 'canonical' => 'Fusion', 'description' => 'Project name: Fusion in Burmese'],\n ['type' => 'project', 'alias' => 'ဇင်းနစ်', 'canonical' => 'Zenith', 'description' => 'Project name: Zenith in Burmese'],\n ['type' => 'project', 'alias' => 'ကွမ်တမ်', 'canonical' => 'Quantum', 'description' => 'Project name: Quantum in Burmese'],\n\n ['type' => 'technical', 'alias' => 'စီအဲန်အန်', 'canonical' => 'CNN', 'description' => 'Convolutional Neural Network'],\n ['type' => 'technical', 'alias' => 'အာရ်အဲန်အန်', 'canonical' => 'RNN', 'description' => 'Recurrent Neural Network'],\n ['type' => 'technical', 'alias' => 'အေပီအိုင်', 'canonical' => 'API', 'description' => 'Application Programming Interface'],\n ['type' => 'technical', 'alias' => 'ယူအိုင်', 'canonical' => 'UI', 'description' => 'User Interface'],\n ['type' => 'technical', 'alias' => 'ယူအက်စ်အို', 'canonical' => 'UX', 'description' => 'User Experience'],\n ['type' => 'technical', 'alias' => 'ဒေတာဘေ့စ်', 'canonical' => 'database', 'description' => 'Database in Burmese'],\n ['type' => 'technical', 'alias' => 'ဆာဗာ', 'canonical' => 'server', 'description' => 'Server in Burmese'],\n\n ['type' => 'general', 'alias' => 'OR', 'canonical' => 'Orion', 'description' => 'Project Orion abbreviation'],\n ['type' => 'general', 'alias' => 'NV', 'canonical' => 'Nova', 'description' => 'Project Nova abbreviation'],\n ];\n\n foreach ($aliases as $alias) {\n TermAlias::firstOrCreate(\n ['alias' => $alias['alias'], 'canonical' => $alias['canonical']],\n $alias,\n );\n }\n }\n}\n"}, "fa0e3c2e26a06e07d24fe040c1e78fbefa19488a": {"t": 1785756479.5096061, "n": 12003, "h": "9e69514425243cf8", "c": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Modules\\SettingsModule\\Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Modules\\SettingsModule\\Models\\AiModel;\nuse Modules\\SettingsModule\\Models\\TermAlias;\n\n/**\n * Settings Module Seeder\n *\n * Seeds the database with default AI model configurations and term alias\n * mappings required for the RAG pipeline to function out of the box.\n * Populates embedding models (nomic, mxbai, MiniLM), LLM models (Qwen,\n * Gemma, Qwen Coder), and a curated set of Burmese→English term aliases.\n *\n * Uses updateOrCreate to be idempotent — safe to run multiple times without\n * creating duplicate entries, and updates existing records with latest defaults.\n * The seeder is organized into embedding model\n * seeding, LLM model seeding, and term alias seeding.\n */\nclass SettingsModuleSeeder extends Seeder\n{\n /**\n * Run the database seeders\n *\n * Seeds embedding models (3 defaults), LLM models (4 defaults), and\n * term aliases (18 mappings covering project names, technical terms,\n * and abbreviations). Each seed uses updateOrCreate to ensure idempotency.\n */\n public function run(): void\n {\n $embeddingModels = [\n [\n 'name' => 'nomic-embed-text',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'nomic-embed-text:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Fast general-purpose embedding (768d). Good balance of speed and quality for most documents.',\n ],\n [\n 'name' => 'mxbai-embed-large',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mxbai-embed-large:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 1024,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'High-quality embedding (1024d). Better accuracy than nomic for nuanced retrieval.',\n ],\n [\n 'name' => 'all-MiniLM-L6-v2',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mahonzhan/all-MiniLM-L6-v2:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 384,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Lightweight embedding (384d). Fastest option, good for high-throughput or simple queries.',\n ],\n [\n 'name' => 'text-embedding-004',\n 'type' => 'embedding',\n 'provider' => 'gemini',\n 'model' => 'text-embedding-004',\n 'base_url' => 'https://generativelanguage.googleapis.com/v1beta',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Google Gemini embedding (768d). High-quality multilingual embeddings via Google API.',\n ],\n ];\n\n $llmModels = [\n [\n 'name' => 'Qwen 3.5 (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen3.5:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.1,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Strong general-purpose 9B model with 32K context. Good reasoning and instruction following.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Qwen 3.5 Claude Opus (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'sorc/qwen3.5-claude-4.6-opus:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'Qwen 3.5 finetuned with Claude-style responses. Creative and detailed answers.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Gemma 4 (e4b)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'gemma4:e4b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.1,\n 'max_context_tokens' => 16384,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Google Gemma 4 — efficient 16K context, low temperature for focused concise answers.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Qwen 2.5 Coder',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen2.5-coder:latest',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.2,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Code-specialized 32K context model. Best for technical documents and code analysis.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Claude Sonnet 4.5',\n 'type' => 'llm',\n 'provider' => 'claude',\n 'model' => 'claude-sonnet-4-5-20250929',\n 'temperature' => 0.3,\n 'max_context_tokens' => 200000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 5,\n 'description' => 'Anthropic Claude Sonnet 4.5 — 200K context, strong reasoning, best-in-class accuracy.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('CLAUDE_API_KEY'),\n ],\n [\n 'name' => 'DeepSeek Chat',\n 'type' => 'llm',\n 'provider' => 'deepseek',\n 'model' => 'deepseek-chat',\n 'temperature' => 0.3,\n 'max_context_tokens' => 128000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 6,\n 'description' => 'DeepSeek Chat — 128K context, cost-effective, strong reasoning and coding.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('DEEPSEEK_API_KEY'),\n ],\n [\n 'name' => 'Gemini 2.5 Flash',\n 'type' => 'llm',\n 'provider' => 'gemini',\n 'model' => 'gemini-2.5-flash',\n 'temperature' => 0.3,\n 'max_context_tokens' => 1048576,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 7,\n 'description' => 'Google Gemini 2.5 Flash — 1M context, fast and cost-effective multimodal.',\n 'settings' => ['max_tokens' => 8192],\n 'api_key' => env('GEMINI_API_KEY'),\n ],\n [\n 'name' => 'GPT-4o',\n 'type' => 'llm',\n 'provider' => 'openai',\n 'model' => 'gpt-4o',\n 'temperature' => 0.3,\n 'max_context_tokens' => 128000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 8,\n 'description' => 'OpenAI GPT-4o — 128K context, multimodal, strong general-purpose reasoning.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('OPENAI_API_KEY'),\n ],\n ];\n\n foreach ($embeddingModels as $model) {\n AiModel::updateOrCreate(\n ['type' => 'embedding', 'model' => $model['model']],\n $model,\n );\n }\n\n foreach ($llmModels as $model) {\n AiModel::updateOrCreate(\n ['type' => 'llm', 'model' => $model['model']],\n $model,\n );\n }\n\n $this->seedTermAliases();\n }\n\n /**\n * Seed term alias mappings\n *\n * Inserts a curated set of Burmese→English term aliases for project names\n * (Orion, Nova, Apex, etc.), technical terms (CNN, API, database, etc.),\n * and general abbreviations (OR→Orion, NV→Nova).\n * Each entry uses firstOrCreate keyed by (alias, canonical) for idempotency.\n */\n private function seedTermAliases(): void\n {\n $aliases = [\n ['type' => 'project', 'alias' => 'အိုရီယွန်', 'canonical' => 'Orion', 'description' => 'Project name: Orion in Burmese'],\n ['type' => 'project', 'alias' => 'အော်ရီယွန်', 'canonical' => 'Orion', 'description' => 'Project name: Orion alternative spelling'],\n ['type' => 'project', 'alias' => 'နိုဗာ', 'canonical' => 'Nova', 'description' => 'Project name: Nova in Burmese'],\n ['type' => 'project', 'alias' => 'အေပက်စ်', 'canonical' => 'Apex', 'description' => 'Project name: Apex in Burmese'],\n ['type' => 'project', 'alias' => 'ဟီလိယပ်', 'canonical' => 'Helios', 'description' => 'Project name: Helios in Burmese'],\n ['type' => 'project', 'alias' => 'အက်တလပ်', 'canonical' => 'Atlas', 'description' => 'Project name: Atlas in Burmese'],\n ['type' => 'project', 'alias' => 'ဖျူးရှင်း', 'canonical' => 'Fusion', 'description' => 'Project name: Fusion in Burmese'],\n ['type' => 'project', 'alias' => 'ဇင်းနစ်', 'canonical' => 'Zenith', 'description' => 'Project name: Zenith in Burmese'],\n ['type' => 'project', 'alias' => 'ကွမ်တမ်', 'canonical' => 'Quantum', 'description' => 'Project name: Quantum in Burmese'],\n\n ['type' => 'technical', 'alias' => 'စီအဲန်အန်', 'canonical' => 'CNN', 'description' => 'Convolutional Neural Network'],\n ['type' => 'technical', 'alias' => 'အာရ်အဲန်အန်', 'canonical' => 'RNN', 'description' => 'Recurrent Neural Network'],\n ['type' => 'technical', 'alias' => 'အေပီအိုင်', 'canonical' => 'API', 'description' => 'Application Programming Interface'],\n ['type' => 'technical', 'alias' => 'ယူအိုင်', 'canonical' => 'UI', 'description' => 'User Interface'],\n ['type' => 'technical', 'alias' => 'ယူအက်စ်အို', 'canonical' => 'UX', 'description' => 'User Experience'],\n ['type' => 'technical', 'alias' => 'ဒေတာဘေ့စ်', 'canonical' => 'database', 'description' => 'Database in Burmese'],\n ['type' => 'technical', 'alias' => 'ဆာဗာ', 'canonical' => 'server', 'description' => 'Server in Burmese'],\n\n ['type' => 'general', 'alias' => 'OR', 'canonical' => 'Orion', 'description' => 'Project Orion abbreviation'],\n ['type' => 'general', 'alias' => 'NV', 'canonical' => 'Nova', 'description' => 'Project Nova abbreviation'],\n ];\n\n foreach ($aliases as $alias) {\n TermAlias::firstOrCreate(\n ['alias' => $alias['alias'], 'canonical' => $alias['canonical']],\n $alias,\n );\n }\n }\n}\n"}, "fd7b5287e8eccab0b114b575b26b45b12012272c": {"t": 1785756481.2575545, "n": 11941, "h": "a98fe8ed90b807ee", "c": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Modules\\SettingsModule\\Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Modules\\SettingsModule\\Models\\AiModel;\nuse Modules\\SettingsModule\\Models\\TermAlias;\n\n/**\n * Settings Module Seeder\n *\n * Seeds the database with default AI model configurations and term alias\n * mappings required for the RAG pipeline to function out of the box.\n * Populates embedding models (nomic, mxbai, MiniLM), LLM models (Qwen,\n * Gemma, Qwen Coder), and a curated set of Burmese→English term aliases.\n *\n * Uses firstOrCreate to be idempotent — safe to run multiple times without\n * creating duplicate entries. The seeder is organized into embedding model\n * seeding, LLM model seeding, and term alias seeding.\n */\nclass SettingsModuleSeeder extends Seeder\n{\n /**\n * Run the database seeders\n *\n * Seeds embedding models (3 defaults), LLM models (4 defaults), and\n * term aliases (18 mappings covering project names, technical terms,\n * and abbreviations). Each seed uses firstOrCreate to ensure idempotency.\n */\n public function run(): void\n {\n $embeddingModels = [\n [\n 'name' => 'nomic-embed-text',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'nomic-embed-text:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Fast general-purpose embedding (768d). Good balance of speed and quality for most documents.',\n ],\n [\n 'name' => 'mxbai-embed-large',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mxbai-embed-large:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 1024,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'High-quality embedding (1024d). Better accuracy than nomic for nuanced retrieval.',\n ],\n [\n 'name' => 'all-MiniLM-L6-v2',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mahonzhan/all-MiniLM-L6-v2:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 384,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Lightweight embedding (384d). Fastest option, good for high-throughput or simple queries.',\n ],\n [\n 'name' => 'text-embedding-004',\n 'type' => 'embedding',\n 'provider' => 'gemini',\n 'model' => 'text-embedding-004',\n 'base_url' => 'https://generativelanguage.googleapis.com/v1beta',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Google Gemini embedding (768d). High-quality multilingual embeddings via Google API.',\n ],\n ];\n\n $llmModels = [\n [\n 'name' => 'Qwen 3.5 (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen3.5:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.1,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Strong general-purpose 9B model with 32K context. Good reasoning and instruction following.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Qwen 3.5 Claude Opus (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'sorc/qwen3.5-claude-4.6-opus:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'Qwen 3.5 finetuned with Claude-style responses. Creative and detailed answers.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Gemma 4 (e4b)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'gemma4:e4b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 16384,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Google Gemma 4 — efficient 16K context. Great for concise Q&A and summarization.',\n 'settings' => ['max_tokens' => 4096],\n ],\n [\n 'name' => 'Qwen 2.5 Coder',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen2.5-coder:latest',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.2,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Code-specialized 32K context model. Best for technical documents and code analysis.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Claude Sonnet 4.5',\n 'type' => 'llm',\n 'provider' => 'claude',\n 'model' => 'claude-sonnet-4-5-20250929',\n 'temperature' => 0.3,\n 'max_context_tokens' => 200000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 5,\n 'description' => 'Anthropic Claude Sonnet 4.5 — 200K context, strong reasoning, best-in-class accuracy.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('CLAUDE_API_KEY'),\n ],\n [\n 'name' => 'DeepSeek Chat',\n 'type' => 'llm',\n 'provider' => 'deepseek',\n 'model' => 'deepseek-chat',\n 'temperature' => 0.3,\n 'max_context_tokens' => 128000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 6,\n 'description' => 'DeepSeek Chat — 128K context, cost-effective, strong reasoning and coding.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('DEEPSEEK_API_KEY'),\n ],\n [\n 'name' => 'Gemini 2.5 Flash',\n 'type' => 'llm',\n 'provider' => 'gemini',\n 'model' => 'gemini-2.5-flash',\n 'temperature' => 0.3,\n 'max_context_tokens' => 1048576,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 7,\n 'description' => 'Google Gemini 2.5 Flash — 1M context, fast and cost-effective multimodal.',\n 'settings' => ['max_tokens' => 8192],\n 'api_key' => env('GEMINI_API_KEY'),\n ],\n [\n 'name' => 'GPT-4o',\n 'type' => 'llm',\n 'provider' => 'openai',\n 'model' => 'gpt-4o',\n 'temperature' => 0.3,\n 'max_context_tokens' => 128000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 8,\n 'description' => 'OpenAI GPT-4o — 128K context, multimodal, strong general-purpose reasoning.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('OPENAI_API_KEY'),\n ],\n ];\n\n foreach ($embeddingModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'embedding', 'model' => $model['model']],\n $model,\n );\n }\n\n foreach ($llmModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'llm', 'model' => $model['model']],\n $model,\n );\n }\n\n $this->seedTermAliases();\n }\n\n /**\n * Seed term alias mappings\n *\n * Inserts a curated set of Burmese→English term aliases for project names\n * (Orion, Nova, Apex, etc.), technical terms (CNN, API, database, etc.),\n * and general abbreviations (OR→Orion, NV→Nova).\n * Each entry uses firstOrCreate keyed by (alias, canonical) for idempotency.\n */\n private function seedTermAliases(): void\n {\n $aliases = [\n ['type' => 'project', 'alias' => 'အိုရီယွန်', 'canonical' => 'Orion', 'description' => 'Project name: Orion in Burmese'],\n ['type' => 'project', 'alias' => 'အော်ရီယွန်', 'canonical' => 'Orion', 'description' => 'Project name: Orion alternative spelling'],\n ['type' => 'project', 'alias' => 'နိုဗာ', 'canonical' => 'Nova', 'description' => 'Project name: Nova in Burmese'],\n ['type' => 'project', 'alias' => 'အေပက်စ်', 'canonical' => 'Apex', 'description' => 'Project name: Apex in Burmese'],\n ['type' => 'project', 'alias' => 'ဟီလိယပ်', 'canonical' => 'Helios', 'description' => 'Project name: Helios in Burmese'],\n ['type' => 'project', 'alias' => 'အက်တလပ်', 'canonical' => 'Atlas', 'description' => 'Project name: Atlas in Burmese'],\n ['type' => 'project', 'alias' => 'ဖျူးရှင်း', 'canonical' => 'Fusion', 'description' => 'Project name: Fusion in Burmese'],\n ['type' => 'project', 'alias' => 'ဇင်းနစ်', 'canonical' => 'Zenith', 'description' => 'Project name: Zenith in Burmese'],\n ['type' => 'project', 'alias' => 'ကွမ်တမ်', 'canonical' => 'Quantum', 'description' => 'Project name: Quantum in Burmese'],\n\n ['type' => 'technical', 'alias' => 'စီအဲန်အန်', 'canonical' => 'CNN', 'description' => 'Convolutional Neural Network'],\n ['type' => 'technical', 'alias' => 'အာရ်အဲန်အန်', 'canonical' => 'RNN', 'description' => 'Recurrent Neural Network'],\n ['type' => 'technical', 'alias' => 'အေပီအိုင်', 'canonical' => 'API', 'description' => 'Application Programming Interface'],\n ['type' => 'technical', 'alias' => 'ယူအိုင်', 'canonical' => 'UI', 'description' => 'User Interface'],\n ['type' => 'technical', 'alias' => 'ယူအက်စ်အို', 'canonical' => 'UX', 'description' => 'User Experience'],\n ['type' => 'technical', 'alias' => 'ဒေတာဘေ့စ်', 'canonical' => 'database', 'description' => 'Database in Burmese'],\n ['type' => 'technical', 'alias' => 'ဆာဗာ', 'canonical' => 'server', 'description' => 'Server in Burmese'],\n\n ['type' => 'general', 'alias' => 'OR', 'canonical' => 'Orion', 'description' => 'Project Orion abbreviation'],\n ['type' => 'general', 'alias' => 'NV', 'canonical' => 'Nova', 'description' => 'Project Nova abbreviation'],\n ];\n\n foreach ($aliases as $alias) {\n TermAlias::firstOrCreate(\n ['alias' => $alias['alias'], 'canonical' => $alias['canonical']],\n $alias,\n );\n }\n }\n}\n"}, "ee6efe0494d1674181a26fbc220d70ae973fab6d": {"t": 1785756483.4769406, "n": 11999, "h": "c17ddcf648753e3d", "c": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Modules\\SettingsModule\\Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Modules\\SettingsModule\\Models\\AiModel;\nuse Modules\\SettingsModule\\Models\\TermAlias;\n\n/**\n * Settings Module Seeder\n * \n * Seeds the database with default AI model configurations and term alias\n * mappings required for the RAG pipeline to function out of the box.\n * Populates embedding models (nomic, mxbai, MiniLM), LLM models (Qwen,\n * Gemma, Qwen Coder), and a curated set of Burmese→English term aliases.\n * \n * Uses firstOrCreate to be idempotent — safe to run multiple times without\n * creating duplicate entries. The seeder is organized into embedding model\n * seeding, LLM model seeding, and term alias seeding.\n */\nclass SettingsModuleSeeder extends Seeder\n{\n /**\n * Run the database seeders\n * \n * Seeds embedding models (3 defaults), LLM models (4 defaults), and\n * term aliases (18 mappings covering project names, technical terms,\n * and abbreviations). Each seed uses firstOrCreate to ensure idempotency.\n *\n * @return void\n */\n public function run(): void\n {\n $embeddingModels = [\n [\n 'name' => 'nomic-embed-text',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'nomic-embed-text:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Fast general-purpose embedding (768d). Good balance of speed and quality for most documents.',\n ],\n [\n 'name' => 'mxbai-embed-large',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mxbai-embed-large:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 1024,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'High-quality embedding (1024d). Better accuracy than nomic for nuanced retrieval.',\n ],\n [\n 'name' => 'all-MiniLM-L6-v2',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mahonzhan/all-MiniLM-L6-v2:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 384,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Lightweight embedding (384d). Fastest option, good for high-throughput or simple queries.',\n ],\n [\n 'name' => 'text-embedding-004',\n 'type' => 'embedding',\n 'provider' => 'gemini',\n 'model' => 'text-embedding-004',\n 'base_url' => 'https://generativelanguage.googleapis.com/v1beta',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Google Gemini embedding (768d). High-quality multilingual embeddings via Google API.',\n ],\n ];\n\n $llmModels = [\n [\n 'name' => 'Qwen 3.5 (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen3.5:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.1,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Strong general-purpose 9B model with 32K context. Good reasoning and instruction following.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Qwen 3.5 Claude Opus (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'sorc/qwen3.5-claude-4.6-opus:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'Qwen 3.5 finetuned with Claude-style responses. Creative and detailed answers.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Gemma 4 (e4b)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'gemma4:e4b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 16384,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Google Gemma 4 — efficient 16K context. Great for concise Q&A and summarization.',\n 'settings' => ['max_tokens' => 4096],\n ],\n [\n 'name' => 'Qwen 2.5 Coder',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen2.5-coder:latest',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.2,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Code-specialized 32K context model. Best for technical documents and code analysis.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Claude Sonnet 4.5',\n 'type' => 'llm',\n 'provider' => 'claude',\n 'model' => 'claude-sonnet-4-5-20250929',\n 'temperature' => 0.3,\n 'max_context_tokens' => 200000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 5,\n 'description' => 'Anthropic Claude Sonnet 4.5 — 200K context, strong reasoning, best-in-class accuracy.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('CLAUDE_API_KEY'),\n ],\n [\n 'name' => 'DeepSeek Chat',\n 'type' => 'llm',\n 'provider' => 'deepseek',\n 'model' => 'deepseek-chat',\n 'temperature' => 0.3,\n 'max_context_tokens' => 128000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 6,\n 'description' => 'DeepSeek Chat — 128K context, cost-effective, strong reasoning and coding.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('DEEPSEEK_API_KEY'),\n ],\n [\n 'name' => 'Gemini 2.5 Flash',\n 'type' => 'llm',\n 'provider' => 'gemini',\n 'model' => 'gemini-2.5-flash',\n 'temperature' => 0.3,\n 'max_context_tokens' => 1048576,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 7,\n 'description' => 'Google Gemini 2.5 Flash — 1M context, fast and cost-effective multimodal.',\n 'settings' => ['max_tokens' => 8192],\n 'api_key' => env('GEMINI_API_KEY'),\n ],\n [\n 'name' => 'GPT-4o',\n 'type' => 'llm',\n 'provider' => 'openai',\n 'model' => 'gpt-4o',\n 'temperature' => 0.3,\n 'max_context_tokens' => 128000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 8,\n 'description' => 'OpenAI GPT-4o — 128K context, multimodal, strong general-purpose reasoning.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('OPENAI_API_KEY'),\n ],\n ];\n\n foreach ($embeddingModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'embedding', 'model' => $model['model']],\n $model,\n );\n }\n\n foreach ($llmModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'llm', 'model' => $model['model']],\n $model,\n );\n }\n\n $this->seedTermAliases();\n }\n\n /**\n * Seed term alias mappings\n * \n * Inserts a curated set of Burmese→English term aliases for project names\n * (Orion, Nova, Apex, etc.), technical terms (CNN, API, database, etc.),\n * and general abbreviations (OR→Orion, NV→Nova).\n * Each entry uses firstOrCreate keyed by (alias, canonical) for idempotency.\n *\n * @return void\n */\n private function seedTermAliases(): void\n {\n $aliases = [\n ['type' => 'project', 'alias' => 'အိုရီယွန်', 'canonical' => 'Orion', 'description' => 'Project name: Orion in Burmese'],\n ['type' => 'project', 'alias' => 'အော်ရီယွန်', 'canonical' => 'Orion', 'description' => 'Project name: Orion alternative spelling'],\n ['type' => 'project', 'alias' => 'နိုဗာ', 'canonical' => 'Nova', 'description' => 'Project name: Nova in Burmese'],\n ['type' => 'project', 'alias' => 'အေပက်စ်', 'canonical' => 'Apex', 'description' => 'Project name: Apex in Burmese'],\n ['type' => 'project', 'alias' => 'ဟီလိယပ်', 'canonical' => 'Helios', 'description' => 'Project name: Helios in Burmese'],\n ['type' => 'project', 'alias' => 'အက်တလပ်', 'canonical' => 'Atlas', 'description' => 'Project name: Atlas in Burmese'],\n ['type' => 'project', 'alias' => 'ဖျူးရှင်း', 'canonical' => 'Fusion', 'description' => 'Project name: Fusion in Burmese'],\n ['type' => 'project', 'alias' => 'ဇင်းနစ်', 'canonical' => 'Zenith', 'description' => 'Project name: Zenith in Burmese'],\n ['type' => 'project', 'alias' => 'ကွမ်တမ်', 'canonical' => 'Quantum', 'description' => 'Project name: Quantum in Burmese'],\n\n ['type' => 'technical', 'alias' => 'စီအဲန်အန်', 'canonical' => 'CNN', 'description' => 'Convolutional Neural Network'],\n ['type' => 'technical', 'alias' => 'အာရ်အဲန်အန်', 'canonical' => 'RNN', 'description' => 'Recurrent Neural Network'],\n ['type' => 'technical', 'alias' => 'အေပီအိုင်', 'canonical' => 'API', 'description' => 'Application Programming Interface'],\n ['type' => 'technical', 'alias' => 'ယူအိုင်', 'canonical' => 'UI', 'description' => 'User Interface'],\n ['type' => 'technical', 'alias' => 'ယူအက်စ်အို', 'canonical' => 'UX', 'description' => 'User Experience'],\n ['type' => 'technical', 'alias' => 'ဒေတာဘေ့စ်', 'canonical' => 'database', 'description' => 'Database in Burmese'],\n ['type' => 'technical', 'alias' => 'ဆာဗာ', 'canonical' => 'server', 'description' => 'Server in Burmese'],\n\n ['type' => 'general', 'alias' => 'OR', 'canonical' => 'Orion', 'description' => 'Project Orion abbreviation'],\n ['type' => 'general', 'alias' => 'NV', 'canonical' => 'Nova', 'description' => 'Project Nova abbreviation'],\n ];\n\n foreach ($aliases as $alias) {\n TermAlias::firstOrCreate(\n ['alias' => $alias['alias'], 'canonical' => $alias['canonical']],\n $alias,\n );\n }\n }\n}\n"}, "e4304fde972e0e84996c7c62c23c2b062c1eb4d0": {"t": 1785756484.9480126, "n": 11999, "h": "9e8079ba5b5db538", "c": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Modules\\SettingsModule\\Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Modules\\SettingsModule\\Models\\AiModel;\nuse Modules\\SettingsModule\\Models\\TermAlias;\n\n/**\n * Settings Module Seeder\n * \n * Seeds the database with default AI model configurations and term alias\n * mappings required for the RAG pipeline to function out of the box.\n * Populates embedding models (nomic, mxbai, MiniLM), LLM models (Qwen,\n * Gemma, Qwen Coder), and a curated set of Burmese→English term aliases.\n * \n * Uses firstOrCreate to be idempotent — safe to run multiple times without\n * creating duplicate entries. The seeder is organized into embedding model\n * seeding, LLM model seeding, and term alias seeding.\n */\nclass SettingsModuleSeeder extends Seeder\n{\n /**\n * Run the database seeders\n * \n * Seeds embedding models (3 defaults), LLM models (4 defaults), and\n * term aliases (18 mappings covering project names, technical terms,\n * and abbreviations). Each seed uses firstOrCreate to ensure idempotency.\n *\n * @return void\n */\n public function run(): void\n {\n $embeddingModels = [\n [\n 'name' => 'nomic-embed-text',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'nomic-embed-text:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Fast general-purpose embedding (768d). Good balance of speed and quality for most documents.',\n ],\n [\n 'name' => 'mxbai-embed-large',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mxbai-embed-large:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 1024,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'High-quality embedding (1024d). Better accuracy than nomic for nuanced retrieval.',\n ],\n [\n 'name' => 'all-MiniLM-L6-v2',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mahonzhan/all-MiniLM-L6-v2:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 384,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Lightweight embedding (384d). Fastest option, good for high-throughput or simple queries.',\n ],\n [\n 'name' => 'text-embedding-004',\n 'type' => 'embedding',\n 'provider' => 'gemini',\n 'model' => 'text-embedding-004',\n 'base_url' => 'https://generativelanguage.googleapis.com/v1beta',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Google Gemini embedding (768d). High-quality multilingual embeddings via Google API.',\n ],\n ];\n\n $llmModels = [\n [\n 'name' => 'Qwen 3.5 (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen3.5:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Strong general-purpose 9B model with 32K context. Good reasoning and instruction following.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Qwen 3.5 Claude Opus (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'sorc/qwen3.5-claude-4.6-opus:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'Qwen 3.5 finetuned with Claude-style responses. Creative and detailed answers.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Gemma 4 (e4b)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'gemma4:e4b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 16384,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Google Gemma 4 — efficient 16K context. Great for concise Q&A and summarization.',\n 'settings' => ['max_tokens' => 4096],\n ],\n [\n 'name' => 'Qwen 2.5 Coder',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen2.5-coder:latest',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.2,\n 'max_context_tokens' => 32768,\n 'timeout' => 300,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Code-specialized 32K context model. Best for technical documents and code analysis.',\n 'settings' => ['max_tokens' => 8192],\n ],\n [\n 'name' => 'Claude Sonnet 4.5',\n 'type' => 'llm',\n 'provider' => 'claude',\n 'model' => 'claude-sonnet-4-5-20250929',\n 'temperature' => 0.3,\n 'max_context_tokens' => 200000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 5,\n 'description' => 'Anthropic Claude Sonnet 4.5 — 200K context, strong reasoning, best-in-class accuracy.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('CLAUDE_API_KEY'),\n ],\n [\n 'name' => 'DeepSeek Chat',\n 'type' => 'llm',\n 'provider' => 'deepseek',\n 'model' => 'deepseek-chat',\n 'temperature' => 0.3,\n 'max_context_tokens' => 128000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 6,\n 'description' => 'DeepSeek Chat — 128K context, cost-effective, strong reasoning and coding.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('DEEPSEEK_API_KEY'),\n ],\n [\n 'name' => 'Gemini 2.5 Flash',\n 'type' => 'llm',\n 'provider' => 'gemini',\n 'model' => 'gemini-2.5-flash',\n 'temperature' => 0.3,\n 'max_context_tokens' => 1048576,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 7,\n 'description' => 'Google Gemini 2.5 Flash — 1M context, fast and cost-effective multimodal.',\n 'settings' => ['max_tokens' => 8192],\n 'api_key' => env('GEMINI_API_KEY'),\n ],\n [\n 'name' => 'GPT-4o',\n 'type' => 'llm',\n 'provider' => 'openai',\n 'model' => 'gpt-4o',\n 'temperature' => 0.3,\n 'max_context_tokens' => 128000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 8,\n 'description' => 'OpenAI GPT-4o — 128K context, multimodal, strong general-purpose reasoning.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('OPENAI_API_KEY'),\n ],\n ];\n\n foreach ($embeddingModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'embedding', 'model' => $model['model']],\n $model,\n );\n }\n\n foreach ($llmModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'llm', 'model' => $model['model']],\n $model,\n );\n }\n\n $this->seedTermAliases();\n }\n\n /**\n * Seed term alias mappings\n * \n * Inserts a curated set of Burmese→English term aliases for project names\n * (Orion, Nova, Apex, etc.), technical terms (CNN, API, database, etc.),\n * and general abbreviations (OR→Orion, NV→Nova).\n * Each entry uses firstOrCreate keyed by (alias, canonical) for idempotency.\n *\n * @return void\n */\n private function seedTermAliases(): void\n {\n $aliases = [\n ['type' => 'project', 'alias' => 'အိုရီယွန်', 'canonical' => 'Orion', 'description' => 'Project name: Orion in Burmese'],\n ['type' => 'project', 'alias' => 'အော်ရီယွန်', 'canonical' => 'Orion', 'description' => 'Project name: Orion alternative spelling'],\n ['type' => 'project', 'alias' => 'နိုဗာ', 'canonical' => 'Nova', 'description' => 'Project name: Nova in Burmese'],\n ['type' => 'project', 'alias' => 'အေပက်စ်', 'canonical' => 'Apex', 'description' => 'Project name: Apex in Burmese'],\n ['type' => 'project', 'alias' => 'ဟီလိယပ်', 'canonical' => 'Helios', 'description' => 'Project name: Helios in Burmese'],\n ['type' => 'project', 'alias' => 'အက်တလပ်', 'canonical' => 'Atlas', 'description' => 'Project name: Atlas in Burmese'],\n ['type' => 'project', 'alias' => 'ဖျူးရှင်း', 'canonical' => 'Fusion', 'description' => 'Project name: Fusion in Burmese'],\n ['type' => 'project', 'alias' => 'ဇင်းနစ်', 'canonical' => 'Zenith', 'description' => 'Project name: Zenith in Burmese'],\n ['type' => 'project', 'alias' => 'ကွမ်တမ်', 'canonical' => 'Quantum', 'description' => 'Project name: Quantum in Burmese'],\n\n ['type' => 'technical', 'alias' => 'စီအဲန်အန်', 'canonical' => 'CNN', 'description' => 'Convolutional Neural Network'],\n ['type' => 'technical', 'alias' => 'အာရ်အဲန်အန်', 'canonical' => 'RNN', 'description' => 'Recurrent Neural Network'],\n ['type' => 'technical', 'alias' => 'အေပီအိုင်', 'canonical' => 'API', 'description' => 'Application Programming Interface'],\n ['type' => 'technical', 'alias' => 'ယူအိုင်', 'canonical' => 'UI', 'description' => 'User Interface'],\n ['type' => 'technical', 'alias' => 'ယူအက်စ်အို', 'canonical' => 'UX', 'description' => 'User Experience'],\n ['type' => 'technical', 'alias' => 'ဒေတာဘေ့စ်', 'canonical' => 'database', 'description' => 'Database in Burmese'],\n ['type' => 'technical', 'alias' => 'ဆာဗာ', 'canonical' => 'server', 'description' => 'Server in Burmese'],\n\n ['type' => 'general', 'alias' => 'OR', 'canonical' => 'Orion', 'description' => 'Project Orion abbreviation'],\n ['type' => 'general', 'alias' => 'NV', 'canonical' => 'Nova', 'description' => 'Project Nova abbreviation'],\n ];\n\n foreach ($aliases as $alias) {\n TermAlias::firstOrCreate(\n ['alias' => $alias['alias'], 'canonical' => $alias['canonical']],\n $alias,\n );\n }\n }\n}\n"}, "fbc84d66e0fdb2f33ea923cd82afa20ab190ac47": {"t": 1785756486.5904531, "n": 11999, "h": "6470a4472e766615", "c": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Modules\\SettingsModule\\Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Modules\\SettingsModule\\Models\\AiModel;\nuse Modules\\SettingsModule\\Models\\TermAlias;\n\n/**\n * Settings Module Seeder\n * \n * Seeds the database with default AI model configurations and term alias\n * mappings required for the RAG pipeline to function out of the box.\n * Populates embedding models (nomic, mxbai, MiniLM), LLM models (Qwen,\n * Gemma, Qwen Coder), and a curated set of Burmese→English term aliases.\n * \n * Uses firstOrCreate to be idempotent — safe to run multiple times without\n * creating duplicate entries. The seeder is organized into embedding model\n * seeding, LLM model seeding, and term alias seeding.\n */\nclass SettingsModuleSeeder extends Seeder\n{\n /**\n * Run the database seeders\n * \n * Seeds embedding models (3 defaults), LLM models (4 defaults), and\n * term aliases (18 mappings covering project names, technical terms,\n * and abbreviations). Each seed uses firstOrCreate to ensure idempotency.\n *\n * @return void\n */\n public function run(): void\n {\n $embeddingModels = [\n [\n 'name' => 'nomic-embed-text',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'nomic-embed-text:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Fast general-purpose embedding (768d). Good balance of speed and quality for most documents.',\n ],\n [\n 'name' => 'mxbai-embed-large',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mxbai-embed-large:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 1024,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'High-quality embedding (1024d). Better accuracy than nomic for nuanced retrieval.',\n ],\n [\n 'name' => 'all-MiniLM-L6-v2',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mahonzhan/all-MiniLM-L6-v2:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 384,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Lightweight embedding (384d). Fastest option, good for high-throughput or simple queries.',\n ],\n [\n 'name' => 'text-embedding-004',\n 'type' => 'embedding',\n 'provider' => 'gemini',\n 'model' => 'text-embedding-004',\n 'base_url' => 'https://generativelanguage.googleapis.com/v1beta',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Google Gemini embedding (768d). High-quality multilingual embeddings via Google API.',\n ],\n ];\n\n $llmModels = [\n [\n 'name' => 'Qwen 3.5 (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen3.5:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 32768,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Strong general-purpose 9B model with 32K context. Good reasoning and instruction following.',\n 'settings' => ['max_tokens' => 4096],\n ],\n [\n 'name' => 'Qwen 3.5 Claude Opus (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'sorc/qwen3.5-claude-4.6-opus:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 32768,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'Qwen 3.5 finetuned with Claude-style responses. Creative and detailed answers.',\n 'settings' => ['max_tokens' => 4096],\n ],\n [\n 'name' => 'Gemma 4 (e4b)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'gemma4:e4b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 16384,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Google Gemma 4 — efficient 16K context. Great for concise Q&A and summarization.',\n 'settings' => ['max_tokens' => 4096],\n ],\n [\n 'name' => 'Qwen 2.5 Coder',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen2.5-coder:latest',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.2,\n 'max_context_tokens' => 32768,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Code-specialized 32K context model. Best for technical documents and code analysis.',\n 'settings' => ['max_tokens' => 4096],\n ],\n [\n 'name' => 'Claude Sonnet 4.5',\n 'type' => 'llm',\n 'provider' => 'claude',\n 'model' => 'claude-sonnet-4-5-20250929',\n 'temperature' => 0.3,\n 'max_context_tokens' => 200000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 5,\n 'description' => 'Anthropic Claude Sonnet 4.5 — 200K context, strong reasoning, best-in-class accuracy.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('CLAUDE_API_KEY'),\n ],\n [\n 'name' => 'DeepSeek Chat',\n 'type' => 'llm',\n 'provider' => 'deepseek',\n 'model' => 'deepseek-chat',\n 'temperature' => 0.3,\n 'max_context_tokens' => 128000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 6,\n 'description' => 'DeepSeek Chat — 128K context, cost-effective, strong reasoning and coding.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('DEEPSEEK_API_KEY'),\n ],\n [\n 'name' => 'Gemini 2.5 Flash',\n 'type' => 'llm',\n 'provider' => 'gemini',\n 'model' => 'gemini-2.5-flash',\n 'temperature' => 0.3,\n 'max_context_tokens' => 1048576,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 7,\n 'description' => 'Google Gemini 2.5 Flash — 1M context, fast and cost-effective multimodal.',\n 'settings' => ['max_tokens' => 8192],\n 'api_key' => env('GEMINI_API_KEY'),\n ],\n [\n 'name' => 'GPT-4o',\n 'type' => 'llm',\n 'provider' => 'openai',\n 'model' => 'gpt-4o',\n 'temperature' => 0.3,\n 'max_context_tokens' => 128000,\n 'timeout' => 180,\n 'is_active' => true,\n 'sort_order' => 8,\n 'description' => 'OpenAI GPT-4o — 128K context, multimodal, strong general-purpose reasoning.',\n 'settings' => ['max_tokens' => 4096],\n 'api_key' => env('OPENAI_API_KEY'),\n ],\n ];\n\n foreach ($embeddingModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'embedding', 'model' => $model['model']],\n $model,\n );\n }\n\n foreach ($llmModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'llm', 'model' => $model['model']],\n $model,\n );\n }\n\n $this->seedTermAliases();\n }\n\n /**\n * Seed term alias mappings\n * \n * Inserts a curated set of Burmese→English term aliases for project names\n * (Orion, Nova, Apex, etc.), technical terms (CNN, API, database, etc.),\n * and general abbreviations (OR→Orion, NV→Nova).\n * Each entry uses firstOrCreate keyed by (alias, canonical) for idempotency.\n *\n * @return void\n */\n private function seedTermAliases(): void\n {\n $aliases = [\n ['type' => 'project', 'alias' => 'အိုရီယွန်', 'canonical' => 'Orion', 'description' => 'Project name: Orion in Burmese'],\n ['type' => 'project', 'alias' => 'အော်ရီယွန်', 'canonical' => 'Orion', 'description' => 'Project name: Orion alternative spelling'],\n ['type' => 'project', 'alias' => 'နိုဗာ', 'canonical' => 'Nova', 'description' => 'Project name: Nova in Burmese'],\n ['type' => 'project', 'alias' => 'အေပက်စ်', 'canonical' => 'Apex', 'description' => 'Project name: Apex in Burmese'],\n ['type' => 'project', 'alias' => 'ဟီလိယပ်', 'canonical' => 'Helios', 'description' => 'Project name: Helios in Burmese'],\n ['type' => 'project', 'alias' => 'အက်တလပ်', 'canonical' => 'Atlas', 'description' => 'Project name: Atlas in Burmese'],\n ['type' => 'project', 'alias' => 'ဖျူးရှင်း', 'canonical' => 'Fusion', 'description' => 'Project name: Fusion in Burmese'],\n ['type' => 'project', 'alias' => 'ဇင်းနစ်', 'canonical' => 'Zenith', 'description' => 'Project name: Zenith in Burmese'],\n ['type' => 'project', 'alias' => 'ကွမ်တမ်', 'canonical' => 'Quantum', 'description' => 'Project name: Quantum in Burmese'],\n\n ['type' => 'technical', 'alias' => 'စီအဲန်အန်', 'canonical' => 'CNN', 'description' => 'Convolutional Neural Network'],\n ['type' => 'technical', 'alias' => 'အာရ်အဲန်အန်', 'canonical' => 'RNN', 'description' => 'Recurrent Neural Network'],\n ['type' => 'technical', 'alias' => 'အေပီအိုင်', 'canonical' => 'API', 'description' => 'Application Programming Interface'],\n ['type' => 'technical', 'alias' => 'ယူအိုင်', 'canonical' => 'UI', 'description' => 'User Interface'],\n ['type' => 'technical', 'alias' => 'ယူအက်စ်အို', 'canonical' => 'UX', 'description' => 'User Experience'],\n ['type' => 'technical', 'alias' => 'ဒေတာဘေ့စ်', 'canonical' => 'database', 'description' => 'Database in Burmese'],\n ['type' => 'technical', 'alias' => 'ဆာဗာ', 'canonical' => 'server', 'description' => 'Server in Burmese'],\n\n ['type' => 'general', 'alias' => 'OR', 'canonical' => 'Orion', 'description' => 'Project Orion abbreviation'],\n ['type' => 'general', 'alias' => 'NV', 'canonical' => 'Nova', 'description' => 'Project Nova abbreviation'],\n ];\n\n foreach ($aliases as $alias) {\n TermAlias::firstOrCreate(\n ['alias' => $alias['alias'], 'canonical' => $alias['canonical']],\n $alias,\n );\n }\n }\n}\n"}, "6f391271386a14efb5af69c78613a17d19896cb7": {"t": 1785756487.833332, "n": 8957, "h": "25040829284fb985", "c": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Modules\\SettingsModule\\Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Modules\\SettingsModule\\Models\\AiModel;\nuse Modules\\SettingsModule\\Models\\TermAlias;\n\n/**\n * Settings Module Seeder\n * \n * Seeds the database with default AI model configurations and term alias\n * mappings required for the RAG pipeline to function out of the box.\n * Populates embedding models (nomic, mxbai, MiniLM), LLM models (Qwen,\n * Gemma, Qwen Coder), and a curated set of Burmese→English term aliases.\n * \n * Uses firstOrCreate to be idempotent — safe to run multiple times without\n * creating duplicate entries. The seeder is organized into embedding model\n * seeding, LLM model seeding, and term alias seeding.\n */\nclass SettingsModuleSeeder extends Seeder\n{\n /**\n * Run the database seeders\n * \n * Seeds embedding models (3 defaults), LLM models (4 defaults), and\n * term aliases (18 mappings covering project names, technical terms,\n * and abbreviations). Each seed uses firstOrCreate to ensure idempotency.\n *\n * @return void\n */\n public function run(): void\n {\n $embeddingModels = [\n [\n 'name' => 'nomic-embed-text',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'nomic-embed-text:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Fast general-purpose embedding (768d). Good balance of speed and quality for most documents.',\n ],\n [\n 'name' => 'mxbai-embed-large',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mxbai-embed-large:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 1024,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'High-quality embedding (1024d). Better accuracy than nomic for nuanced retrieval.',\n ],\n [\n 'name' => 'all-MiniLM-L6-v2',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mahonzhan/all-MiniLM-L6-v2:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 384,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Lightweight embedding (384d). Fastest option, good for high-throughput or simple queries.',\n ],\n ];\n\n $llmModels = [\n [\n 'name' => 'Qwen 3.5 (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen3.5:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 32768,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Strong general-purpose 9B model with 32K context. Good reasoning and instruction following.',\n 'settings' => ['max_tokens' => 4096],\n ],\n [\n 'name' => 'Qwen 3.5 Claude Opus (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'sorc/qwen3.5-claude-4.6-opus:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 32768,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'Qwen 3.5 finetuned with Claude-style responses. Creative and detailed answers.',\n 'settings' => ['max_tokens' => 4096],\n ],\n [\n 'name' => 'Gemma 4 (e4b)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'gemma4:e4b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 16384,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Google Gemma 4 — efficient 16K context. Great for concise Q&A and summarization.',\n 'settings' => ['max_tokens' => 4096],\n ],\n [\n 'name' => 'Qwen 2.5 Coder',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen2.5-coder:latest',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.2,\n 'max_context_tokens' => 32768,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Code-specialized 32K context model. Best for technical documents and code analysis.',\n 'settings' => ['max_tokens' => 4096],\n ],\n ];\n\n foreach ($embeddingModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'embedding', 'model' => $model['model']],\n $model,\n );\n }\n\n foreach ($llmModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'llm', 'model' => $model['model']],\n $model,\n );\n }\n\n $this->seedTermAliases();\n }\n\n /**\n * Seed term alias mappings\n * \n * Inserts a curated set of Burmese→English term aliases for project names\n * (Orion, Nova, Apex, etc.), technical terms (CNN, API, database, etc.),\n * and general abbreviations (OR→Orion, NV→Nova).\n * Each entry uses firstOrCreate keyed by (alias, canonical) for idempotency.\n *\n * @return void\n */\n private function seedTermAliases(): void\n {\n $aliases = [\n ['type' => 'project', 'alias' => 'အိုရီယွန်', 'canonical' => 'Orion', 'description' => 'Project name: Orion in Burmese'],\n ['type' => 'project', 'alias' => 'အော်ရီယွန်', 'canonical' => 'Orion', 'description' => 'Project name: Orion alternative spelling'],\n ['type' => 'project', 'alias' => 'နိုဗာ', 'canonical' => 'Nova', 'description' => 'Project name: Nova in Burmese'],\n ['type' => 'project', 'alias' => 'အေပက်စ်', 'canonical' => 'Apex', 'description' => 'Project name: Apex in Burmese'],\n ['type' => 'project', 'alias' => 'ဟီလိယပ်', 'canonical' => 'Helios', 'description' => 'Project name: Helios in Burmese'],\n ['type' => 'project', 'alias' => 'အက်တလပ်', 'canonical' => 'Atlas', 'description' => 'Project name: Atlas in Burmese'],\n ['type' => 'project', 'alias' => 'ဖျူးရှင်း', 'canonical' => 'Fusion', 'description' => 'Project name: Fusion in Burmese'],\n ['type' => 'project', 'alias' => 'ဇင်းနစ်', 'canonical' => 'Zenith', 'description' => 'Project name: Zenith in Burmese'],\n ['type' => 'project', 'alias' => 'ကွမ်တမ်', 'canonical' => 'Quantum', 'description' => 'Project name: Quantum in Burmese'],\n\n ['type' => 'technical', 'alias' => 'စီအဲန်အန်', 'canonical' => 'CNN', 'description' => 'Convolutional Neural Network'],\n ['type' => 'technical', 'alias' => 'အာရ်အဲန်အန်', 'canonical' => 'RNN', 'description' => 'Recurrent Neural Network'],\n ['type' => 'technical', 'alias' => 'အေပီအိုင်', 'canonical' => 'API', 'description' => 'Application Programming Interface'],\n ['type' => 'technical', 'alias' => 'ယူအိုင်', 'canonical' => 'UI', 'description' => 'User Interface'],\n ['type' => 'technical', 'alias' => 'ယူအက်စ်အို', 'canonical' => 'UX', 'description' => 'User Experience'],\n ['type' => 'technical', 'alias' => 'ဒေတာဘေ့စ်', 'canonical' => 'database', 'description' => 'Database in Burmese'],\n ['type' => 'technical', 'alias' => 'ဆာဗာ', 'canonical' => 'server', 'description' => 'Server in Burmese'],\n\n ['type' => 'general', 'alias' => 'OR', 'canonical' => 'Orion', 'description' => 'Project Orion abbreviation'],\n ['type' => 'general', 'alias' => 'NV', 'canonical' => 'Nova', 'description' => 'Project Nova abbreviation'],\n ];\n\n foreach ($aliases as $alias) {\n TermAlias::firstOrCreate(\n ['alias' => $alias['alias'], 'canonical' => $alias['canonical']],\n $alias,\n );\n }\n }\n}\n"}, "7decc0d2d406e9f620bd0ef25bf52cd4e7d449a6": {"t": 1785756489.8348715, "n": 5019, "h": "5bbfbbdb689af2ca", "c": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Modules\\SettingsModule\\Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Modules\\SettingsModule\\Models\\AiModel;\n\nclass SettingsModuleSeeder extends Seeder\n{\n public function run(): void\n {\n $embeddingModels = [\n [\n 'name' => 'nomic-embed-text',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'nomic-embed-text:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Fast general-purpose embedding (768d). Good balance of speed and quality for most documents.',\n ],\n [\n 'name' => 'mxbai-embed-large',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mxbai-embed-large:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 1024,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'High-quality embedding (1024d). Better accuracy than nomic for nuanced retrieval.',\n ],\n [\n 'name' => 'all-MiniLM-L6-v2',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mahonzhan/all-MiniLM-L6-v2:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 384,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Lightweight embedding (384d). Fastest option, good for high-throughput or simple queries.',\n ],\n ];\n\n $llmModels = [\n [\n 'name' => 'Qwen 3.5 (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen3.5:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 32768,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Strong general-purpose 9B model with 32K context. Good reasoning and instruction following.',\n 'settings' => ['max_tokens' => 4096],\n ],\n [\n 'name' => 'Qwen 3.5 Claude Opus (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'sorc/qwen3.5-claude-4.6-opus:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 32768,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'Qwen 3.5 finetuned with Claude-style responses. Creative and detailed answers.',\n 'settings' => ['max_tokens' => 4096],\n ],\n [\n 'name' => 'Gemma 4 (e4b)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'gemma4:e4b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 16384,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Google Gemma 4 — efficient 16K context. Great for concise Q&A and summarization.',\n 'settings' => ['max_tokens' => 4096],\n ],\n [\n 'name' => 'Qwen 2.5 Coder',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen2.5-coder:latest',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.2,\n 'max_context_tokens' => 32768,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Code-specialized 32K context model. Best for technical documents and code analysis.',\n 'settings' => ['max_tokens' => 4096],\n ],\n ];\n\n foreach ($embeddingModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'embedding', 'model' => $model['model']],\n $model,\n );\n }\n\n foreach ($llmModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'llm', 'model' => $model['model']],\n $model,\n );\n }\n }\n}\n"}, "abe1ebec4fa49fd4438569dd1614e1d2c6b64282": {"t": 1785756492.8063288, "n": 4803, "h": "f4520045fb9e59e2", "c": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Modules\\SettingsModule\\Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Modules\\SettingsModule\\Models\\AiModel;\n\nclass SettingsModuleSeeder extends Seeder\n{\n public function run(): void\n {\n $embeddingModels = [\n [\n 'name' => 'nomic-embed-text',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'nomic-embed-text:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Fast general-purpose embedding (768d). Good balance of speed and quality for most documents.',\n ],\n [\n 'name' => 'mxbai-embed-large',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mxbai-embed-large:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 1024,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'High-quality embedding (1024d). Better accuracy than nomic for nuanced retrieval.',\n ],\n [\n 'name' => 'all-MiniLM-L6-v2',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'mahonzhan/all-MiniLM-L6-v2:latest',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 384,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Lightweight embedding (384d). Fastest option, good for high-throughput or simple queries.',\n ],\n ];\n\n $llmModels = [\n [\n 'name' => 'Qwen 3.5 (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen3.5:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 32768,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Strong general-purpose 9B model with 32K context. Good reasoning and instruction following.',\n ],\n [\n 'name' => 'Qwen 3.5 Claude Opus (9B)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'sorc/qwen3.5-claude-4.6-opus:9b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 32768,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'Qwen 3.5 finetuned with Claude-style responses. Creative and detailed answers.',\n ],\n [\n 'name' => 'Gemma 4 (e4b)',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'gemma4:e4b',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 16384,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 3,\n 'description' => 'Google Gemma 4 — efficient 16K context. Great for concise Q&A and summarization.',\n ],\n [\n 'name' => 'Qwen 2.5 Coder',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'qwen2.5-coder:latest',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.2,\n 'max_context_tokens' => 32768,\n 'timeout' => 120,\n 'is_active' => true,\n 'sort_order' => 4,\n 'description' => 'Code-specialized 32K context model. Best for technical documents and code analysis.',\n ],\n ];\n\n foreach ($embeddingModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'embedding', 'model' => $model['model']],\n $model,\n );\n }\n\n foreach ($llmModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'llm', 'model' => $model['model']],\n $model,\n );\n }\n }\n}\n"}, "db7acce497505cc2f90103fe03fccc8ca7c10201": {"t": 1785756494.482042, "n": 8779, "h": "4240121c49cc3fae", "c": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Modules\\SettingsModule\\Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Modules\\SettingsModule\\Models\\AiModel;\nuse Modules\\SettingsModule\\Models\\Setting;\n\nclass SettingsModuleSeeder extends Seeder\n{\n public function run(): void\n {\n $defaults = [\n ['key' => 'RAG_EMBEDDING_PROVIDER', 'value' => env('RAG_EMBEDDING_PROVIDER', 'openai'), 'type' => 'string', 'group' => 'embedding'],\n ['key' => 'RAG_EMBEDDING_MODEL', 'value' => env('RAG_EMBEDDING_MODEL', 'text-embedding-3-small'), 'type' => 'string', 'group' => 'embedding'],\n ['key' => 'RAG_EMBEDDING_DIMENSIONS', 'value' => env('RAG_EMBEDDING_DIMENSIONS', '1536'), 'type' => 'int', 'group' => 'embedding'],\n ['key' => 'RAG_EMBEDDING_BATCH_SIZE', 'value' => env('RAG_EMBEDDING_BATCH_SIZE', '100'), 'type' => 'int', 'group' => 'embedding'],\n ['key' => 'RAG_EMBEDDING_CACHE_TTL', 'value' => env('RAG_EMBEDDING_CACHE_TTL', '86400'), 'type' => 'int', 'group' => 'embedding'],\n ['key' => 'RAG_EMBEDDING_TIMEOUT', 'value' => env('RAG_EMBEDDING_TIMEOUT', '30'), 'type' => 'int', 'group' => 'embedding'],\n ['key' => 'RAG_EMBEDDING_BASE_URL', 'value' => env('RAG_EMBEDDING_BASE_URL', 'http://localhost:11434'), 'type' => 'string', 'group' => 'embedding'],\n ['key' => 'RAG_LLM_PROVIDER', 'value' => env('RAG_LLM_PROVIDER', 'openai'), 'type' => 'string', 'group' => 'llm'],\n ['key' => 'RAG_LLM_MODEL', 'value' => env('RAG_LLM_MODEL', 'gpt-4o'), 'type' => 'string', 'group' => 'llm'],\n ['key' => 'RAG_LLM_TEMPERATURE', 'value' => env('RAG_LLM_TEMPERATURE', '0.3'), 'type' => 'float', 'group' => 'llm'],\n ['key' => 'RAG_LLM_MAX_CONTEXT_TOKENS', 'value' => env('RAG_LLM_MAX_CONTEXT_TOKENS', '4000'), 'type' => 'int', 'group' => 'llm'],\n ['key' => 'RAG_LLM_TIMEOUT', 'value' => env('RAG_LLM_TIMEOUT', '60'), 'type' => 'int', 'group' => 'llm'],\n ['key' => 'RAG_LLM_BASE_URL', 'value' => env('RAG_LLM_BASE_URL', 'http://localhost:11434'), 'type' => 'string', 'group' => 'llm'],\n ['key' => 'RAG_VECTOR_DRIVER', 'value' => env('RAG_VECTOR_DRIVER', 'pgsql'), 'type' => 'string', 'group' => 'vector_store'],\n ['key' => 'RAG_VECTOR_INDEX_LISTS', 'value' => env('RAG_VECTOR_INDEX_LISTS', '100'), 'type' => 'int', 'group' => 'vector_store'],\n ['key' => 'RAG_SEARCH_MODE', 'value' => env('RAG_SEARCH_MODE', 'hybrid'), 'type' => 'string', 'group' => 'search'],\n ['key' => 'RAG_SEARCH_TOP_K', 'value' => env('RAG_SEARCH_TOP_K', '5'), 'type' => 'int', 'group' => 'search'],\n ['key' => 'RAG_SEARCH_SIMILARITY_THRESHOLD', 'value' => env('RAG_SEARCH_SIMILARITY_THRESHOLD', '0.65'), 'type' => 'float', 'group' => 'search'],\n ['key' => 'RAG_SEARCH_HYBRID_VECTOR_WEIGHT', 'value' => env('RAG_SEARCH_HYBRID_VECTOR_WEIGHT', '0.7'), 'type' => 'float', 'group' => 'search'],\n ['key' => 'RAG_SEARCH_HYBRID_FTS_WEIGHT', 'value' => env('RAG_SEARCH_HYBRID_FTS_WEIGHT', '0.3'), 'type' => 'float', 'group' => 'search'],\n ['key' => 'RAG_QUERY_EXPANSION_ENABLED', 'value' => env('RAG_QUERY_EXPANSION_ENABLED', 'false'), 'type' => 'bool', 'group' => 'search'],\n ['key' => 'RAG_QUERY_EXPANSION_NUM_QUERIES', 'value' => env('RAG_QUERY_EXPANSION_NUM_QUERIES', '3'), 'type' => 'int', 'group' => 'search'],\n ['key' => 'RAG_SEARCH_MMR_ENABLED', 'value' => env('RAG_SEARCH_MMR_ENABLED', 'true'), 'type' => 'bool', 'group' => 'search'],\n ['key' => 'RAG_SEARCH_MMR_LAMBDA', 'value' => env('RAG_SEARCH_MMR_LAMBDA', '0.7'), 'type' => 'float', 'group' => 'search'],\n ['key' => 'RAG_CHUNK_SIZE', 'value' => env('RAG_CHUNK_SIZE', '1000'), 'type' => 'int', 'group' => 'chunking'],\n ['key' => 'RAG_CHUNK_OVERLAP', 'value' => env('RAG_CHUNK_OVERLAP', '200'), 'type' => 'int', 'group' => 'chunking'],\n ['key' => 'RAG_MAX_QUESTION_LENGTH', 'value' => env('RAG_MAX_QUESTION_LENGTH', '1000'), 'type' => 'int', 'group' => 'chat'],\n ['key' => 'RAG_MAX_MESSAGES_PER_SESSION', 'value' => env('RAG_MAX_MESSAGES_PER_SESSION', '100'), 'type' => 'int', 'group' => 'chat'],\n ['key' => 'RAG_EMBEDDING_AVAILABLE_MODELS', 'value' => '[\"text-embedding-3-small\",\"text-embedding-3-large\",\"text-embedding-ada-002\"]', 'type' => 'json', 'group' => 'embedding'],\n ['key' => 'RAG_LLM_AVAILABLE_MODELS', 'value' => '[\"gpt-4o\",\"gpt-4o-mini\",\"gpt-4-turbo\",\"llama3.2\",\"gemma4:e4b\"]', 'type' => 'json', 'group' => 'llm'],\n ['key' => 'RAG_LOG_CHANNEL', 'value' => env('RAG_LOG_CHANNEL', 'rag'), 'type' => 'string', 'group' => 'logging'],\n ['key' => 'RAG_LOG_LEVEL', 'value' => env('RAG_LOG_LEVEL', 'info'), 'type' => 'string', 'group' => 'logging'],\n ];\n\n foreach ($defaults as $entry) {\n Setting::firstOrCreate(\n ['key' => $entry['key']],\n $entry,\n );\n }\n\n // Seed default AI models\n $embeddingModels = [\n [\n 'name' => 'OpenAI text-embedding-3-small',\n 'type' => 'embedding',\n 'provider' => 'openai',\n 'model' => 'text-embedding-3-small',\n 'dimensions' => 1536,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Best price/quality balance. Fast and reliable with 1536d vectors. Requires OpenAI API key.',\n ],\n [\n 'name' => 'OpenAI text-embedding-3-large',\n 'type' => 'embedding',\n 'provider' => 'openai',\n 'model' => 'text-embedding-3-large',\n 'dimensions' => 3072,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'Highest accuracy (3072d) for nuanced search, but more expensive and slower than small.',\n ],\n [\n 'name' => 'Ollama nomic-embed-text',\n 'type' => 'embedding',\n 'provider' => 'ollama',\n 'model' => 'nomic-embed-text',\n 'base_url' => 'http://localhost:11434',\n 'dimensions' => 768,\n 'batch_size' => 100,\n 'cache_ttl' => 86400,\n 'timeout' => 30,\n 'is_active' => false,\n 'sort_order' => 3,\n 'description' => 'Free and local-only (768d). No API key needed but requires local Ollama server.',\n ],\n ];\n\n $llmModels = [\n [\n 'name' => 'OpenAI GPT-4o',\n 'type' => 'llm',\n 'provider' => 'openai',\n 'model' => 'gpt-4o',\n 'temperature' => 0.3,\n 'max_context_tokens' => 128000,\n 'timeout' => 60,\n 'is_active' => true,\n 'sort_order' => 1,\n 'description' => 'Best-in-class reasoning with 128K context. Strong at complex RAG but most expensive.',\n ],\n [\n 'name' => 'OpenAI GPT-4o-mini',\n 'type' => 'llm',\n 'provider' => 'openai',\n 'model' => 'gpt-4o-mini',\n 'temperature' => 0.3,\n 'max_context_tokens' => 128000,\n 'timeout' => 60,\n 'is_active' => true,\n 'sort_order' => 2,\n 'description' => 'Fast and cheap with 128K context. Great for Q&A but lower reasoning than GPT-4o.',\n ],\n [\n 'name' => 'Ollama Llama 3.2',\n 'type' => 'llm',\n 'provider' => 'ollama',\n 'model' => 'llama3.2',\n 'base_url' => 'http://localhost:11434',\n 'temperature' => 0.3,\n 'max_context_tokens' => 4096,\n 'timeout' => 120,\n 'is_active' => false,\n 'sort_order' => 3,\n 'description' => 'Free and local-only with 4K context. Good for offline dev but needs Ollama server.',\n ],\n ];\n\n foreach ($embeddingModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'embedding', 'model' => $model['model']],\n $model,\n );\n }\n\n foreach ($llmModels as $model) {\n AiModel::firstOrCreate(\n ['type' => 'llm', 'model' => $model['model']],\n $model,\n );\n }\n }\n}\n"}, "26cb6bc5bbc752fad9d768aeca431b06cd58b3a8": {"t": 1785756495.6648786, "n": 4963, "h": "d3b00a57d10727e6", "c": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Modules\\SettingsModule\\Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Modules\\SettingsModule\\Models\\Setting;\n\nclass SettingsModuleSeeder extends Seeder\n{\n public function run(): void\n {\n $defaults = [\n ['key' => 'RAG_EMBEDDING_PROVIDER', 'value' => env('RAG_EMBEDDING_PROVIDER', 'openai'), 'type' => 'string', 'group' => 'embedding'],\n ['key' => 'RAG_EMBEDDING_MODEL', 'value' => env('RAG_EMBEDDING_MODEL', 'text-embedding-3-small'), 'type' => 'string', 'group' => 'embedding'],\n ['key' => 'RAG_EMBEDDING_DIMENSIONS', 'value' => env('RAG_EMBEDDING_DIMENSIONS', '1536'), 'type' => 'int', 'group' => 'embedding'],\n ['key' => 'RAG_EMBEDDING_BATCH_SIZE', 'value' => env('RAG_EMBEDDING_BATCH_SIZE', '100'), 'type' => 'int', 'group' => 'embedding'],\n ['key' => 'RAG_EMBEDDING_CACHE_TTL', 'value' => env('RAG_EMBEDDING_CACHE_TTL', '86400'), 'type' => 'int', 'group' => 'embedding'],\n ['key' => 'RAG_EMBEDDING_TIMEOUT', 'value' => env('RAG_EMBEDDING_TIMEOUT', '30'), 'type' => 'int', 'group' => 'embedding'],\n ['key' => 'RAG_EMBEDDING_BASE_URL', 'value' => env('RAG_EMBEDDING_BASE_URL', 'http://localhost:11434'), 'type' => 'string', 'group' => 'embedding'],\n ['key' => 'RAG_LLM_PROVIDER', 'value' => env('RAG_LLM_PROVIDER', 'openai'), 'type' => 'string', 'group' => 'llm'],\n ['key' => 'RAG_LLM_MODEL', 'value' => env('RAG_LLM_MODEL', 'gpt-4o'), 'type' => 'string', 'group' => 'llm'],\n ['key' => 'RAG_LLM_TEMPERATURE', 'value' => env('RAG_LLM_TEMPERATURE', '0.3'), 'type' => 'float', 'group' => 'llm'],\n ['key' => 'RAG_LLM_MAX_CONTEXT_TOKENS', 'value' => env('RAG_LLM_MAX_CONTEXT_TOKENS', '4000'), 'type' => 'int', 'group' => 'llm'],\n ['key' => 'RAG_LLM_TIMEOUT', 'value' => env('RAG_LLM_TIMEOUT', '60'), 'type' => 'int', 'group' => 'llm'],\n ['key' => 'RAG_LLM_BASE_URL', 'value' => env('RAG_LLM_BASE_URL', 'http://localhost:11434'), 'type' => 'string', 'group' => 'llm'],\n ['key' => 'RAG_VECTOR_DRIVER', 'value' => env('RAG_VECTOR_DRIVER', 'pgsql'), 'type' => 'string', 'group' => 'vector_store'],\n ['key' => 'RAG_VECTOR_INDEX_LISTS', 'value' => env('RAG_VECTOR_INDEX_LISTS', '100'), 'type' => 'int', 'group' => 'vector_store'],\n ['key' => 'RAG_SEARCH_MODE', 'value' => env('RAG_SEARCH_MODE', 'hybrid'), 'type' => 'string', 'group' => 'search'],\n ['key' => 'RAG_SEARCH_TOP_K', 'value' => env('RAG_SEARCH_TOP_K', '5'), 'type' => 'int', 'group' => 'search'],\n ['key' => 'RAG_SEARCH_SIMILARITY_THRESHOLD', 'value' => env('RAG_SEARCH_SIMILARITY_THRESHOLD', '0.65'), 'type' => 'float', 'group' => 'search'],\n ['key' => 'RAG_SEARCH_HYBRID_VECTOR_WEIGHT', 'value' => env('RAG_SEARCH_HYBRID_VECTOR_WEIGHT', '0.7'), 'type' => 'float', 'group' => 'search'],\n ['key' => 'RAG_SEARCH_HYBRID_FTS_WEIGHT', 'value' => env('RAG_SEARCH_HYBRID_FTS_WEIGHT', '0.3'), 'type' => 'float', 'group' => 'search'],\n ['key' => 'RAG_QUERY_EXPANSION_ENABLED', 'value' => env('RAG_QUERY_EXPANSION_ENABLED', 'false'), 'type' => 'bool', 'group' => 'search'],\n ['key' => 'RAG_QUERY_EXPANSION_NUM_QUERIES', 'value' => env('RAG_QUERY_EXPANSION_NUM_QUERIES', '3'), 'type' => 'int', 'group' => 'search'],\n ['key' => 'RAG_SEARCH_MMR_ENABLED', 'value' => env('RAG_SEARCH_MMR_ENABLED', 'true'), 'type' => 'bool', 'group' => 'search'],\n ['key' => 'RAG_SEARCH_MMR_LAMBDA', 'value' => env('RAG_SEARCH_MMR_LAMBDA', '0.7'), 'type' => 'float', 'group' => 'search'],\n ['key' => 'RAG_CHUNK_SIZE', 'value' => env('RAG_CHUNK_SIZE', '1000'), 'type' => 'int', 'group' => 'chunking'],\n ['key' => 'RAG_CHUNK_OVERLAP', 'value' => env('RAG_CHUNK_OVERLAP', '200'), 'type' => 'int', 'group' => 'chunking'],\n ['key' => 'RAG_MAX_QUESTION_LENGTH', 'value' => env('RAG_MAX_QUESTION_LENGTH', '1000'), 'type' => 'int', 'group' => 'chat'],\n ['key' => 'RAG_MAX_MESSAGES_PER_SESSION', 'value' => env('RAG_MAX_MESSAGES_PER_SESSION', '100'), 'type' => 'int', 'group' => 'chat'],\n ['key' => 'RAG_EMBEDDING_AVAILABLE_MODELS', 'value' => '[\"text-embedding-3-small\",\"text-embedding-3-large\",\"text-embedding-ada-002\"]', 'type' => 'json', 'group' => 'embedding'],\n ['key' => 'RAG_LLM_AVAILABLE_MODELS', 'value' => '[\"gpt-4o\",\"gpt-4o-mini\",\"gpt-4-turbo\",\"llama3.2\",\"gemma4:e4b\"]', 'type' => 'json', 'group' => 'llm'],\n ['key' => 'RAG_LOG_CHANNEL', 'value' => env('RAG_LOG_CHANNEL', 'rag'), 'type' => 'string', 'group' => 'logging'],\n ['key' => 'RAG_LOG_LEVEL', 'value' => env('RAG_LOG_LEVEL', 'info'), 'type' => 'string', 'group' => 'logging'],\n ];\n\n foreach ($defaults as $entry) {\n Setting::firstOrCreate(\n ['key' => $entry['key']],\n $entry,\n );\n }\n }\n}\n"}}}}