Repository navigation
Expand file tree
/
Copy pathconfig.js
More file actions
146 lines (120 loc) · 8.23 KB
/
Copy pathconfig.js
File metadata and controls
146 lines (120 loc) · 8.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
window.DUALMIND_CONFIG = window.DUALMIND_CONFIG || {};
// ========== BACKEND URL CONFIGURATION ==========
const isLocalhost =
window.location.hostname === 'localhost' ||
window.location.hostname === '127.0.0.1' ||
window.location.hostname === '::1';
const BACKEND_URL = isLocalhost ? 'http://localhost:5079' : 'https://api.dualmindlab.tech';
// Single API base URL used by UI for all fetch calls
window.DUALMIND_CONFIG.apiBaseUrl = BACKEND_URL;
// Set it globally so all code can access it
window.DUALMIND_CONFIG.backendUrl = BACKEND_URL;
// Legacy support for old config structure
const BACKEND_MODE = isLocalhost ? 'localhost' : 'production';
const BACKEND_URLS = {
localhost: 'http://localhost:5079',
production: BACKEND_URL
};
// Get the backend URL - always returns the single source of truth
const getBackendUrl = () => {
return BACKEND_URL;
};
// Set the server URL
window.DUALMIND_CONFIG.serverUrl = window.DUALMIND_CONFIG.serverUrl || getBackendUrl();
window.DUALMIND_CONFIG.siteUrl = window.DUALMIND_CONFIG.siteUrl || window.location.origin;
// Optional local-dev override (must be explicitly set; never accidental)
window.DUALMIND_CONFIG.dev = window.DUALMIND_CONFIG.dev || {};
// ========== Speed & Performance Settings ==========
// Streaming Configuration
window.DUALMIND_CONFIG.streaming = window.DUALMIND_CONFIG.streaming || {};
window.DUALMIND_CONFIG.streaming.enabled = true; // Streaming always enabled
window.DUALMIND_CONFIG.streaming.chunkDelay = window.DUALMIND_CONFIG.streaming.chunkDelay || 50; // Optimized for smooth streaming
window.DUALMIND_CONFIG.streaming.maxChunkSize = window.DUALMIND_CONFIG.streaming.maxChunkSize || 10; // Characters per chunk
window.DUALMIND_CONFIG.streaming.smoothScrolling = window.DUALMIND_CONFIG.streaming.smoothScrolling !== false; // Default: true
// API Timeouts & Performance
window.DUALMIND_CONFIG.api = window.DUALMIND_CONFIG.api || {};
window.DUALMIND_CONFIG.api.timeout = window.DUALMIND_CONFIG.api.timeout || 30000; // 30 seconds default
window.DUALMIND_CONFIG.api.retryAttempts = window.DUALMIND_CONFIG.api.retryAttempts || 2;
window.DUALMIND_CONFIG.api.retryDelay = window.DUALMIND_CONFIG.api.retryDelay || 1000; // 1 second base delay
window.DUALMIND_CONFIG.api.healthCheckInterval = window.DUALMIND_CONFIG.api.healthCheckInterval || 30000; // 30 seconds
// Model Performance Settings
window.DUALMIND_CONFIG.models = window.DUALMIND_CONFIG.models || {};
window.DUALMIND_CONFIG.models.defaultModel = window.DUALMIND_CONFIG.models.defaultModel || 'llama-3.1-8b-instant';
window.DUALMIND_CONFIG.models.preferredProvider = window.DUALMIND_CONFIG.models.preferredProvider || 'auto'; // 'auto', 'groq', 'openai', etc.
window.DUALMIND_CONFIG.models.maxTokens = window.DUALMIND_CONFIG.models.maxTokens || 4096;
window.DUALMIND_CONFIG.models.temperature = window.DUALMIND_CONFIG.models.temperature || 0.7;
window.DUALMIND_CONFIG.models.speedPriority = window.DUALMIND_CONFIG.models.speedPriority || 'balanced'; // 'speed', 'balanced', 'quality'
// UI Performance Settings
window.DUALMIND_CONFIG.ui = window.DUALMIND_CONFIG.ui || {};
window.DUALMIND_CONFIG.ui.autoResizeTextarea = window.DUALMIND_CONFIG.ui.autoResizeTextarea !== false; // Default: true
window.DUALMIND_CONFIG.ui.maxTextareaHeight = window.DUALMIND_CONFIG.ui.maxTextareaHeight || 180; // pixels
window.DUALMIND_CONFIG.ui.typingIndicatorDelay = window.DUALMIND_CONFIG.ui.typingIndicatorDelay || 300; // ms
window.DUALMIND_CONFIG.ui.scrollBehavior = window.DUALMIND_CONFIG.ui.scrollBehavior || 'smooth'; // 'smooth', 'auto'
// Caching & Performance
window.DUALMIND_CONFIG.cache = window.DUALMIND_CONFIG.cache || {};
window.DUALMIND_CONFIG.cache.leaderboardExpiry = window.DUALMIND_CONFIG.cache.leaderboardExpiry || 300000; // 5 minutes
window.DUALMIND_CONFIG.cache.modelListExpiry = window.DUALMIND_CONFIG.cache.modelListExpiry || 3600000; // 1 hour
window.DUALMIND_CONFIG.cache.threadExpiry = window.DUALMIND_CONFIG.cache.threadExpiry || 1800000; // 30 minutes
// Debug & Development
window.DUALMIND_CONFIG.debug = window.DUALMIND_CONFIG.debug || {};
window.DUALMIND_CONFIG.debug.enabled = window.DUALMIND_CONFIG.debug.enabled || false;
window.DUALMIND_CONFIG.debug.logApiCalls = window.DUALMIND_CONFIG.debug.logApiCalls || false;
window.DUALMIND_CONFIG.debug.showPerformanceMetrics = window.DUALMIND_CONFIG.debug.showPerformanceMetrics || false;
// Feature Flags
window.DUALMIND_CONFIG.features = window.DUALMIND_CONFIG.features || {};
window.DUALMIND_CONFIG.features.streaming = window.DUALMIND_CONFIG.features.streaming !== false; // Default: true
window.DUALMIND_CONFIG.features.voting = window.DUALMIND_CONFIG.features.voting !== false; // Default: true
window.DUALMIND_CONFIG.features.threads = window.DUALMIND_CONFIG.features.threads !== false; // Default: true
window.DUALMIND_CONFIG.features.leaderboard = window.DUALMIND_CONFIG.features.leaderboard !== false; // Default: true
// Speed Presets (for quick configuration)
window.DUALMIND_CONFIG.presets = {
fast: {
streaming: { chunkDelay: 25, maxChunkSize: 5 },
api: { timeout: 15000 },
models: { speedPriority: 'speed' }
},
balanced: {
streaming: { chunkDelay: 50, maxChunkSize: 8 },
api: { timeout: 30000 },
models: { speedPriority: 'balanced' }
},
quality: {
streaming: { chunkDelay: 100, maxChunkSize: 15 },
api: { timeout: 60000 },
models: { speedPriority: 'quality' }
}
};
// Apply preset if specified
if (window.DUALMIND_CONFIG.speedPreset) {
const preset = window.DUALMIND_CONFIG.presets[window.DUALMIND_CONFIG.speedPreset];
if (preset) {
Object.assign(window.DUALMIND_CONFIG.streaming, preset.streaming);
Object.assign(window.DUALMIND_CONFIG.api, preset.api);
Object.assign(window.DUALMIND_CONFIG.models, preset.models);
}
}
// ========== SUPABASE CONFIGURATION ==========
// Direct authentication with Supabase (no backend required)
window.DUALMIND_CONFIG.supabase = window.DUALMIND_CONFIG.supabase || {};
const envSupabaseUrl = (typeof process !== 'undefined' && process.env && process.env.SUPABASE_URL) ? process.env.SUPABASE_URL : 'https://calqfzajyidkdzbaswjp.supabase.co';
const envSupabaseAnonKey = (typeof process !== 'undefined' && process.env && process.env.SUPABASE_ANON_KEY) ? process.env.SUPABASE_ANON_KEY : 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImNhbHFmemFqeWlka2R6YmFzd2pwIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjQyNzMwODMsImV4cCI6MjA3OTg0OTA4M30.ptXyUNCcAhGi9u2kVDHOxSBvQv0W72S5HHqkIFXQS08';
window.DUALMIND_CONFIG.supabase.url = window.DUALMIND_CONFIG.supabase.url || envSupabaseUrl;
window.DUALMIND_CONFIG.supabase.anonKey = window.DUALMIND_CONFIG.supabase.anonKey || envSupabaseAnonKey;
window.DUALMIND_CONFIG.supabase.authEmailFunctionUrl = window.DUALMIND_CONFIG.supabase.authEmailFunctionUrl || (envSupabaseUrl !== 'YOUR_SUPABASE_URL' ? `${envSupabaseUrl}/functions/v1/email-wel-safe` : 'YOUR_SUPABASE_URL/functions/v1/email-wel-safe');
// Optional: Supabase storage bucket for user avatars
window.DUALMIND_CONFIG.supabase.storageBucket = window.DUALMIND_CONFIG.supabase.storageBucket || 'avatars';
// Authentication mode: 'supabase' or 'backend'
window.DUALMIND_CONFIG.auth = window.DUALMIND_CONFIG.auth || {};
window.DUALMIND_CONFIG.auth.mode = window.DUALMIND_CONFIG.auth.mode || 'supabase'; // 'supabase' for direct auth, 'backend' for server auth
window.DUALMIND_CONFIG.auth.autoInitialize = window.DUALMIND_CONFIG.auth.autoInitialize !== false; // Auto-init on page load
// Auth email behavior for edge function helper
window.DUALMIND_CONFIG.email = window.DUALMIND_CONFIG.email || {};
window.DUALMIND_CONFIG.email.sendWelcomeOnSignUp = window.DUALMIND_CONFIG.email.sendWelcomeOnSignUp !== false;
window.DUALMIND_CONFIG.email.sendLoginNotification = window.DUALMIND_CONFIG.email.sendLoginNotification !== false;
window.DUALMIND_CONFIG.email.clientDebounceMs = window.DUALMIND_CONFIG.email.clientDebounceMs || 30000;
// ========== OFFLINE MODE CONFIGURATION ==========
// When backend is not available, app runs in offline/demo mode
window.DUALMIND_CONFIG.offline = window.DUALMIND_CONFIG.offline || {};
window.DUALMIND_CONFIG.offline.enabled = false; // Disable offline mode by default - check backend first
window.DUALMIND_CONFIG.offline.mockResponses = true; // Use mock responses
window.DUALMIND_CONFIG.offline.showOfflineIndicator = false; // Don't show offline indicator