jbilcke-hf HF Staff commited on
Commit
ede808f
·
1 Parent(s): 8d3d781
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
- _currentProvider = LLMProvider.getById(_selectedLlmProvider);
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
- 'api_key': llmApiKey,
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
- 'api_key': llmApiKey,
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
- 'api_key': llmApiKey,
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
- 'api_key': llmApiKey,
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
- # Case 1: Use a provider with a provider-specific API key if available
167
- # This mode is currently hidden in the Flutter UI (we don't ask for provider-specific keys yet)
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 either a valid {provider} API key or your Hugging Face API key.")
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