Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -103,13 +103,12 @@ public static async Task<GatewayAppRuntime> InitializeOpenClawRuntimeAsync(

if (!services.ProviderRegistry.MarkDefault(config.Llm.Provider) && !services.ProviderRegistry.TryGet(config.Llm.Provider, out _))
{
var suffix = builtInInitError is null
? string.Empty
: $" Built-in provider initialization failed: {builtInInitError}.";
var suffix = builtInInitError is null ? string.Empty : $" Built-in provider initialization failed: {builtInInitError}.";
throw new InvalidOperationException(
$"Configured provider '{config.Llm.Provider}' is not available.{suffix} " +
"Register it as the built-in provider or via a compatible plugin.");
}
services.ModelProfiles.SetDefaultProfileId();

var chatClient = services.ProviderRegistry.TryGet("default", out var defaultRegistration) && defaultRegistration is not null
? defaultRegistration.Client
Expand Down
5 changes: 3 additions & 2 deletions src/OpenClaw.Gateway/Endpoints/AdminEndpoints.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,12 @@ public static void MapOpenClawAdminEndpoints(
?? new SetupVerificationSnapshotStore(startup.Config.Memory.StoragePath);
var modelProfiles = app.Services.GetService<IModelProfileRegistry>()
?? runtime.Operations.ModelProfiles as IModelProfileRegistry
?? new ConfiguredModelProfileRegistry(startup.Config, NullLogger<ConfiguredModelProfileRegistry>.Instance);
?? ConfiguredModelProfileRegistry.CreateInitialized(startup.Config);
var modelEvaluationRunner = app.Services.GetService<ModelEvaluationRunner>()
?? new ModelEvaluationRunner(
runtime.Operations.ModelProfiles as ConfiguredModelProfileRegistry
?? new ConfiguredModelProfileRegistry(startup.Config, NullLogger<ConfiguredModelProfileRegistry>.Instance),
?? modelProfiles as ConfiguredModelProfileRegistry
?? ConfiguredModelProfileRegistry.CreateInitialized(startup.Config),
startup.Config,
NullLogger<ModelEvaluationRunner>.Instance);
var redaction = app.Services.GetService<IRedactionPipeline>();
Expand Down
2 changes: 1 addition & 1 deletion src/OpenClaw.Gateway/Endpoints/DiagnosticsEndpoints.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public static void MapOpenClawDiagnosticsEndpoints(
var operatorAccounts = app.Services.GetRequiredService<OperatorAccountService>();
var modelProfiles = app.Services.GetService<IModelProfileRegistry>()
?? runtime.Operations.ModelProfiles as IModelProfileRegistry
?? new ConfiguredModelProfileRegistry(startup.Config, NullLogger<ConfiguredModelProfileRegistry>.Instance);
?? ConfiguredModelProfileRegistry.CreateInitialized(startup.Config);
var providerSmokeRegistry = app.Services.GetService<ProviderSmokeRegistry>()
?? new ProviderSmokeRegistry();

Expand Down
1 change: 1 addition & 0 deletions src/OpenClaw.Gateway/GatewayLlmExecutionService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -898,6 +898,7 @@ private static string DecodeRouteSegment(string value)
private static CompatibilityServices CreateCompatibilityServices(GatewayConfig config, LlmProviderRegistry registry)
{
var modelProfiles = new ConfiguredModelProfileRegistry(config, NullLogger<ConfiguredModelProfileRegistry>.Instance, registry);
modelProfiles.SetDefaultProfileId();
return new CompatibilityServices
{
Registry = modelProfiles,
Expand Down
20 changes: 18 additions & 2 deletions src/OpenClaw.Gateway/Models/ConfiguredModelProfileRegistry.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.Collections.Concurrent;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using OpenClaw.Core.Abstractions;
using OpenClaw.Core.Models;
using OpenClaw.Core.Security;
Expand All @@ -26,6 +27,7 @@ internal sealed class Registration
private readonly ILogger<ConfiguredModelProfileRegistry> _logger;
private readonly LlmProviderRegistry? _providerRegistry;
private readonly IVideoFrameExtractionService? _videoFrameExtraction;
private readonly GatewayConfig _config;

public ConfiguredModelProfileRegistry(GatewayConfig config, ILogger<ConfiguredModelProfileRegistry> logger)
: this(config, logger, null)
Expand All @@ -38,13 +40,27 @@ public ConfiguredModelProfileRegistry(
LlmProviderRegistry? providerRegistry,
IVideoFrameExtractionService? videoFrameExtraction = null)
{
_config = config;
_logger = logger;
_providerRegistry = providerRegistry;
_videoFrameExtraction = videoFrameExtraction;
DefaultProfileId = BuildRegistrations(config);
}

public string? DefaultProfileId { get; }
public string? DefaultProfileId { get; private set; }

internal static ConfiguredModelProfileRegistry CreateInitialized(GatewayConfig config)
{
var registry = new ConfiguredModelProfileRegistry(config, NullLogger<ConfiguredModelProfileRegistry>.Instance);
registry.SetDefaultProfileId();
return registry;
}

public void SetDefaultProfileId()
{
if (DefaultProfileId is not null)
return;
DefaultProfileId = BuildRegistrations(_config);
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Comment thread
coderabbitai[bot] marked this conversation as resolved.

public bool TryGet(string profileId, out ModelProfile? profile)
{
Expand Down
Loading