110 lines
4.5 KiB
C#
110 lines
4.5 KiB
C#
using Microsoft.Extensions.Logging;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace MarketAlly.Replicate.Maui
|
|
{
|
|
/// <summary>
|
|
/// Factory for creating IReplicateTransformer instances with custom API tokens.
|
|
/// Useful for BYOK (Bring Your Own Key) scenarios.
|
|
/// </summary>
|
|
public interface IReplicateTransformerFactory
|
|
{
|
|
/// <summary>
|
|
/// Creates a transformer using the default configured settings.
|
|
/// </summary>
|
|
IReplicateTransformer Create();
|
|
|
|
/// <summary>
|
|
/// Creates a transformer with a custom API token, using default settings for everything else.
|
|
/// </summary>
|
|
/// <param name="apiToken">The Replicate API token to use.</param>
|
|
IReplicateTransformer CreateWithToken(string apiToken);
|
|
|
|
/// <summary>
|
|
/// Creates a transformer with fully custom settings.
|
|
/// </summary>
|
|
/// <param name="configure">Action to configure the settings.</param>
|
|
IReplicateTransformer CreateWithSettings(Action<ReplicateSettings> configure);
|
|
}
|
|
|
|
public class ReplicateTransformerFactory : IReplicateTransformerFactory
|
|
{
|
|
private readonly IHttpClientFactory _httpClientFactory;
|
|
private readonly ReplicateSettings _defaultSettings;
|
|
private readonly ILoggerFactory? _loggerFactory;
|
|
|
|
public ReplicateTransformerFactory(
|
|
IHttpClientFactory httpClientFactory,
|
|
IOptions<ReplicateSettings> defaultSettings,
|
|
ILoggerFactory? loggerFactory = null)
|
|
{
|
|
_httpClientFactory = httpClientFactory;
|
|
_defaultSettings = defaultSettings.Value;
|
|
_loggerFactory = loggerFactory;
|
|
}
|
|
|
|
public IReplicateTransformer Create()
|
|
{
|
|
var httpClient = _httpClientFactory.CreateClient();
|
|
var logger = _loggerFactory?.CreateLogger<ReplicateTransformer>();
|
|
return new ReplicateTransformer(httpClient, Options.Create(_defaultSettings), logger);
|
|
}
|
|
|
|
public IReplicateTransformer CreateWithToken(string apiToken)
|
|
{
|
|
var settings = CloneSettings(_defaultSettings);
|
|
settings.ApiToken = apiToken;
|
|
|
|
var httpClient = _httpClientFactory.CreateClient();
|
|
var logger = _loggerFactory?.CreateLogger<ReplicateTransformer>();
|
|
return new ReplicateTransformer(httpClient, Options.Create(settings), logger);
|
|
}
|
|
|
|
public IReplicateTransformer CreateWithSettings(Action<ReplicateSettings> configure)
|
|
{
|
|
var settings = CloneSettings(_defaultSettings);
|
|
configure(settings);
|
|
|
|
var httpClient = _httpClientFactory.CreateClient();
|
|
var logger = _loggerFactory?.CreateLogger<ReplicateTransformer>();
|
|
return new ReplicateTransformer(httpClient, Options.Create(settings), logger);
|
|
}
|
|
|
|
private static ReplicateSettings CloneSettings(ReplicateSettings source)
|
|
{
|
|
return new ReplicateSettings
|
|
{
|
|
ApiToken = source.ApiToken,
|
|
ApiUrl = source.ApiUrl,
|
|
AuthScheme = source.AuthScheme,
|
|
ModelVersion = source.ModelVersion,
|
|
ModelName = source.ModelName,
|
|
TimeoutSeconds = source.TimeoutSeconds,
|
|
PollingDelayMs = source.PollingDelayMs,
|
|
ImagePrompt = source.ImagePrompt,
|
|
VideoModelName = source.VideoModelName,
|
|
VideoModelVersion = source.VideoModelVersion,
|
|
VideoPrompt = source.VideoPrompt,
|
|
VideoTimeoutSeconds = source.VideoTimeoutSeconds,
|
|
VideoPollingDelayMs = source.VideoPollingDelayMs,
|
|
DefaultSettings = new ImageTransformSettings
|
|
{
|
|
Seed = source.DefaultSettings.Seed,
|
|
GuidanceScale = source.DefaultSettings.GuidanceScale,
|
|
Strength = source.DefaultSettings.Strength,
|
|
NumInferenceSteps = source.DefaultSettings.NumInferenceSteps
|
|
},
|
|
VideoSettings = new VideoTransformSettings
|
|
{
|
|
Seed = source.VideoSettings.Seed,
|
|
Duration = source.VideoSettings.Duration,
|
|
Size = source.VideoSettings.Size,
|
|
AudioUrl = source.VideoSettings.AudioUrl,
|
|
NegativePrompt = source.VideoSettings.NegativePrompt,
|
|
EnablePromptExpansion = source.VideoSettings.EnablePromptExpansion
|
|
}
|
|
};
|
|
}
|
|
}
|
|
}
|