Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
Commit
·
ede808f
1
Parent(s):
8d3d781
test fix
Browse files
lib/screens/settings_screen.dart
CHANGED
@@ -18,7 +18,6 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|
18 |
final _negativePromptController = TextEditingController();
|
19 |
final _hfApiKeyController = TextEditingController();
|
20 |
final _gameMasterPromptController = TextEditingController();
|
21 |
-
final _llmApiKeyController = TextEditingController();
|
22 |
final _modelNameController = TextEditingController();
|
23 |
final _settingsService = SettingsService();
|
24 |
final _availabilityService = ModelAvailabilityService();
|
@@ -42,7 +41,6 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|
42 |
_negativePromptController.text = _settingsService.negativeVideoPrompt;
|
43 |
_hfApiKeyController.text = _settingsService.huggingfaceApiKey;
|
44 |
_gameMasterPromptController.text = _settingsService.gameMasterPrompt;
|
45 |
-
_llmApiKeyController.text = _settingsService.llmApiKey;
|
46 |
_showSceneDebugInfo = _settingsService.showSceneDebugInfo;
|
47 |
_enableSimulation = _settingsService.enableSimulation;
|
48 |
_simLoopDelayInSec = _settingsService.simLoopDelayInSec;
|
@@ -78,7 +76,6 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|
78 |
_negativePromptController.dispose();
|
79 |
_hfApiKeyController.dispose();
|
80 |
_gameMasterPromptController.dispose();
|
81 |
-
_llmApiKeyController.dispose();
|
82 |
_modelNameController.dispose();
|
83 |
super.dispose();
|
84 |
}
|
@@ -147,7 +144,6 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|
147 |
// Switch to first compatible provider
|
148 |
setState(() {
|
149 |
_selectedLlmProvider = compatibleProviders.first;
|
150 |
-
_currentProvider = LLMProvider.getById(_selectedLlmProvider);
|
151 |
});
|
152 |
await _settingsService.setLlmProvider(_selectedLlmProvider);
|
153 |
} else {
|
@@ -365,8 +361,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|
365 |
// Reset to first available provider if we had built-in selected
|
366 |
if (_selectedLlmProvider == 'built-in') {
|
367 |
_selectedLlmProvider = _availableProviders.isNotEmpty ? _availableProviders.first.id : 'hf-inference';
|
368 |
-
|
369 |
-
}
|
370 |
});
|
371 |
await _settingsService.setLlmModel(newModel.modelId);
|
372 |
if (_selectedLlmProvider != 'built-in') {
|
|
|
18 |
final _negativePromptController = TextEditingController();
|
19 |
final _hfApiKeyController = TextEditingController();
|
20 |
final _gameMasterPromptController = TextEditingController();
|
|
|
21 |
final _modelNameController = TextEditingController();
|
22 |
final _settingsService = SettingsService();
|
23 |
final _availabilityService = ModelAvailabilityService();
|
|
|
41 |
_negativePromptController.text = _settingsService.negativeVideoPrompt;
|
42 |
_hfApiKeyController.text = _settingsService.huggingfaceApiKey;
|
43 |
_gameMasterPromptController.text = _settingsService.gameMasterPrompt;
|
|
|
44 |
_showSceneDebugInfo = _settingsService.showSceneDebugInfo;
|
45 |
_enableSimulation = _settingsService.enableSimulation;
|
46 |
_simLoopDelayInSec = _settingsService.simLoopDelayInSec;
|
|
|
76 |
_negativePromptController.dispose();
|
77 |
_hfApiKeyController.dispose();
|
78 |
_gameMasterPromptController.dispose();
|
|
|
79 |
_modelNameController.dispose();
|
80 |
super.dispose();
|
81 |
}
|
|
|
144 |
// Switch to first compatible provider
|
145 |
setState(() {
|
146 |
_selectedLlmProvider = compatibleProviders.first;
|
|
|
147 |
});
|
148 |
await _settingsService.setLlmProvider(_selectedLlmProvider);
|
149 |
} else {
|
|
|
361 |
// Reset to first available provider if we had built-in selected
|
362 |
if (_selectedLlmProvider == 'built-in') {
|
363 |
_selectedLlmProvider = _availableProviders.isNotEmpty ? _availableProviders.first.id : 'hf-inference';
|
364 |
+
}
|
|
|
365 |
});
|
366 |
await _settingsService.setLlmModel(newModel.modelId);
|
367 |
if (_selectedLlmProvider != 'built-in') {
|
lib/services/settings_service.dart
CHANGED
@@ -13,7 +13,6 @@ class SettingsService {
|
|
13 |
static const String _gameMasterPromptKey = 'game_master_prompt';
|
14 |
static const String _llmProviderKey = 'llm_provider';
|
15 |
static const String _llmModelKey = 'llm_model';
|
16 |
-
static const String _llmApiKeyKey = 'llm_api_key';
|
17 |
static final SettingsService _instance = SettingsService._internal();
|
18 |
|
19 |
factory SettingsService() => _instance;
|
@@ -91,13 +90,6 @@ class SettingsService {
|
|
91 |
_settingsController.add(null);
|
92 |
}
|
93 |
|
94 |
-
String get llmApiKey => _prefs.getString(_llmApiKeyKey) ?? '';
|
95 |
-
|
96 |
-
Future<void> setLlmApiKey(String apiKey) async {
|
97 |
-
await _prefs.setString(_llmApiKeyKey, apiKey);
|
98 |
-
_settingsController.add(null);
|
99 |
-
}
|
100 |
-
|
101 |
void dispose() {
|
102 |
_settingsController.close();
|
103 |
}
|
|
|
13 |
static const String _gameMasterPromptKey = 'game_master_prompt';
|
14 |
static const String _llmProviderKey = 'llm_provider';
|
15 |
static const String _llmModelKey = 'llm_model';
|
|
|
16 |
static final SettingsService _instance = SettingsService._internal();
|
17 |
|
18 |
factory SettingsService() => _instance;
|
|
|
90 |
_settingsController.add(null);
|
91 |
}
|
92 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
void dispose() {
|
94 |
_settingsController.close();
|
95 |
}
|
lib/services/websocket_api_service.dart
CHANGED
@@ -876,7 +876,6 @@ class WebSocketApiService {
|
|
876 |
final settings = SettingsService();
|
877 |
final llmProvider = settings.llmProvider;
|
878 |
final llmModel = settings.llmModel;
|
879 |
-
final llmApiKey = settings.llmApiKey;
|
880 |
final hfApiKey = settings.huggingfaceApiKey;
|
881 |
|
882 |
while (_activeSearches[query] == true &&
|
@@ -893,8 +892,7 @@ class WebSocketApiService {
|
|
893 |
'llm_config': {
|
894 |
'provider': llmProvider,
|
895 |
'model': llmModel,
|
896 |
-
|
897 |
-
'hf_token': hfApiKey,
|
898 |
'game_master_prompt': settings.gameMasterPrompt,
|
899 |
},
|
900 |
},
|
@@ -1056,8 +1054,6 @@ class WebSocketApiService {
|
|
1056 |
debugPrint('WebSocketApiService: Processing join chat response');
|
1057 |
_pendingRequests[requestId]!.complete(data);
|
1058 |
} else if (action == 'search' && data['success'] == true && data['result'] != null) {
|
1059 |
-
final result = VideoResult.fromJson(data['result'] as Map<String, dynamic>);
|
1060 |
-
|
1061 |
// Complete the pending request but don't add to search results here
|
1062 |
// The search results will be handled by the startContinuousSearch method
|
1063 |
_pendingRequests[requestId]!.complete(data);
|
@@ -1274,7 +1270,6 @@ class WebSocketApiService {
|
|
1274 |
final settings = SettingsService();
|
1275 |
final llmProvider = settings.llmProvider;
|
1276 |
final llmModel = settings.llmModel;
|
1277 |
-
final llmApiKey = settings.llmApiKey;
|
1278 |
final hfApiKey = settings.huggingfaceApiKey;
|
1279 |
|
1280 |
final response = await _sendRequest(
|
@@ -1285,7 +1280,7 @@ class WebSocketApiService {
|
|
1285 |
'llm_config': {
|
1286 |
'provider': llmProvider,
|
1287 |
'model': llmModel,
|
1288 |
-
'
|
1289 |
'game_master_prompt': settings.gameMasterPrompt,
|
1290 |
},
|
1291 |
},
|
@@ -1356,7 +1351,6 @@ class WebSocketApiService {
|
|
1356 |
final settings = SettingsService();
|
1357 |
final llmProvider = settings.llmProvider;
|
1358 |
final llmModel = settings.llmModel;
|
1359 |
-
final llmApiKey = settings.llmApiKey;
|
1360 |
final hfApiKey = settings.huggingfaceApiKey;
|
1361 |
|
1362 |
final response = await _sendRequest(
|
@@ -1368,7 +1362,7 @@ class WebSocketApiService {
|
|
1368 |
'llm_config': {
|
1369 |
'provider': llmProvider,
|
1370 |
'model': llmModel,
|
1371 |
-
'
|
1372 |
'game_master_prompt': settings.gameMasterPrompt,
|
1373 |
},
|
1374 |
},
|
@@ -1438,7 +1432,6 @@ class WebSocketApiService {
|
|
1438 |
final settings = SettingsService();
|
1439 |
final llmProvider = settings.llmProvider;
|
1440 |
final llmModel = settings.llmModel;
|
1441 |
-
final llmApiKey = settings.llmApiKey;
|
1442 |
final hfApiKey = settings.huggingfaceApiKey;
|
1443 |
|
1444 |
final response = await _sendRequest(
|
@@ -1455,7 +1448,7 @@ class WebSocketApiService {
|
|
1455 |
'llm_config': {
|
1456 |
'provider': llmProvider,
|
1457 |
'model': llmModel,
|
1458 |
-
'
|
1459 |
'game_master_prompt': settings.gameMasterPrompt,
|
1460 |
},
|
1461 |
},
|
|
|
876 |
final settings = SettingsService();
|
877 |
final llmProvider = settings.llmProvider;
|
878 |
final llmModel = settings.llmModel;
|
|
|
879 |
final hfApiKey = settings.huggingfaceApiKey;
|
880 |
|
881 |
while (_activeSearches[query] == true &&
|
|
|
892 |
'llm_config': {
|
893 |
'provider': llmProvider,
|
894 |
'model': llmModel,
|
895 |
+
'hf_token': hfApiKey,
|
|
|
896 |
'game_master_prompt': settings.gameMasterPrompt,
|
897 |
},
|
898 |
},
|
|
|
1054 |
debugPrint('WebSocketApiService: Processing join chat response');
|
1055 |
_pendingRequests[requestId]!.complete(data);
|
1056 |
} else if (action == 'search' && data['success'] == true && data['result'] != null) {
|
|
|
|
|
1057 |
// Complete the pending request but don't add to search results here
|
1058 |
// The search results will be handled by the startContinuousSearch method
|
1059 |
_pendingRequests[requestId]!.complete(data);
|
|
|
1270 |
final settings = SettingsService();
|
1271 |
final llmProvider = settings.llmProvider;
|
1272 |
final llmModel = settings.llmModel;
|
|
|
1273 |
final hfApiKey = settings.huggingfaceApiKey;
|
1274 |
|
1275 |
final response = await _sendRequest(
|
|
|
1280 |
'llm_config': {
|
1281 |
'provider': llmProvider,
|
1282 |
'model': llmModel,
|
1283 |
+
'hf_token': hfApiKey,
|
1284 |
'game_master_prompt': settings.gameMasterPrompt,
|
1285 |
},
|
1286 |
},
|
|
|
1351 |
final settings = SettingsService();
|
1352 |
final llmProvider = settings.llmProvider;
|
1353 |
final llmModel = settings.llmModel;
|
|
|
1354 |
final hfApiKey = settings.huggingfaceApiKey;
|
1355 |
|
1356 |
final response = await _sendRequest(
|
|
|
1362 |
'llm_config': {
|
1363 |
'provider': llmProvider,
|
1364 |
'model': llmModel,
|
1365 |
+
'hf_token': hfApiKey,
|
1366 |
'game_master_prompt': settings.gameMasterPrompt,
|
1367 |
},
|
1368 |
},
|
|
|
1432 |
final settings = SettingsService();
|
1433 |
final llmProvider = settings.llmProvider;
|
1434 |
final llmModel = settings.llmModel;
|
|
|
1435 |
final hfApiKey = settings.huggingfaceApiKey;
|
1436 |
|
1437 |
final response = await _sendRequest(
|
|
|
1448 |
'llm_config': {
|
1449 |
'provider': llmProvider,
|
1450 |
'model': llmModel,
|
1451 |
+
'hf_token': hfApiKey,
|
1452 |
'game_master_prompt': settings.gameMasterPrompt,
|
1453 |
},
|
1454 |
},
|
server/llm_utils.py
CHANGED
@@ -159,29 +159,18 @@ def get_inference_client(llm_config: Optional[dict] = None) -> InferenceClient:
|
|
159 |
raise ValueError("Built-in provider is not available. Server HF_TOKEN is not configured.")
|
160 |
|
161 |
model = llm_config.get('model', '')
|
162 |
-
user_provider_api_key = llm_config.get('api_key', '') # Provider-specific API key
|
163 |
user_hf_token = llm_config.get('hf_token', '') # User's HF token
|
164 |
|
165 |
try:
|
166 |
-
#
|
167 |
-
|
168 |
-
# but it is implemented here so that we don't forget it later
|
169 |
-
if user_provider_api_key:
|
170 |
-
return InferenceClient(
|
171 |
-
provider=provider,
|
172 |
-
model=model,
|
173 |
-
api_key=user_provider_api_key
|
174 |
-
)
|
175 |
-
|
176 |
-
# Case 2: Use a provider with user's HF token if available
|
177 |
-
elif user_hf_token:
|
178 |
return InferenceClient(
|
179 |
provider=provider,
|
180 |
model=model,
|
181 |
token=user_hf_token
|
182 |
)
|
183 |
else:
|
184 |
-
raise ValueError(f"No API key provided for provider '{provider}'. Please provide
|
185 |
|
186 |
except ValueError:
|
187 |
# Re-raise ValueError for missing API keys
|
|
|
159 |
raise ValueError("Built-in provider is not available. Server HF_TOKEN is not configured.")
|
160 |
|
161 |
model = llm_config.get('model', '')
|
|
|
162 |
user_hf_token = llm_config.get('hf_token', '') # User's HF token
|
163 |
|
164 |
try:
|
165 |
+
# Use provider with user's HF token if available
|
166 |
+
if user_hf_token:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
167 |
return InferenceClient(
|
168 |
provider=provider,
|
169 |
model=model,
|
170 |
token=user_hf_token
|
171 |
)
|
172 |
else:
|
173 |
+
raise ValueError(f"No Hugging Face API key provided for provider '{provider}'. Please provide your Hugging Face API key.")
|
174 |
|
175 |
except ValueError:
|
176 |
# Re-raise ValueError for missing API keys
|