11using System . Collections . Concurrent ;
22using Microsoft . Extensions . AI ;
33using Microsoft . Extensions . Logging ;
4+ using Microsoft . Extensions . Logging . Abstractions ;
45using OpenClaw . Core . Abstractions ;
56using OpenClaw . Core . Models ;
67using OpenClaw . Core . Security ;
@@ -26,6 +27,7 @@ internal sealed class Registration
2627 private readonly ILogger < ConfiguredModelProfileRegistry > _logger ;
2728 private readonly LlmProviderRegistry ? _providerRegistry ;
2829 private readonly IVideoFrameExtractionService ? _videoFrameExtraction ;
30+ private readonly GatewayConfig _config ;
2931
3032 public ConfiguredModelProfileRegistry ( GatewayConfig config , ILogger < ConfiguredModelProfileRegistry > logger )
3133 : this ( config , logger , null )
@@ -38,13 +40,27 @@ public ConfiguredModelProfileRegistry(
3840 LlmProviderRegistry ? providerRegistry ,
3941 IVideoFrameExtractionService ? videoFrameExtraction = null )
4042 {
43+ _config = config ;
4144 _logger = logger ;
4245 _providerRegistry = providerRegistry ;
4346 _videoFrameExtraction = videoFrameExtraction ;
44- DefaultProfileId = BuildRegistrations ( config ) ;
4547 }
4648
47- public string ? DefaultProfileId { get ; }
49+ public string ? DefaultProfileId { get ; private set ; }
50+
51+ internal static ConfiguredModelProfileRegistry CreateInitialized ( GatewayConfig config )
52+ {
53+ var registry = new ConfiguredModelProfileRegistry ( config , NullLogger < ConfiguredModelProfileRegistry > . Instance ) ;
54+ registry . SetDefaultProfileId ( ) ;
55+ return registry ;
56+ }
57+
58+ public void SetDefaultProfileId ( )
59+ {
60+ if ( DefaultProfileId is not null )
61+ return ;
62+ DefaultProfileId = BuildRegistrations ( _config ) ;
63+ }
4864
4965 public bool TryGet ( string profileId , out ModelProfile ? profile )
5066 {
0 commit comments