add settings in file handler
This commit is contained in:
parent
939e9cfd4e
commit
c31eff6632
|
|
@ -76,7 +76,6 @@ public class LlmModelSetting
|
||||||
#region Embedding model settings
|
#region Embedding model settings
|
||||||
public class EmbeddingSetting
|
public class EmbeddingSetting
|
||||||
{
|
{
|
||||||
public bool IsDefault { get; set; }
|
|
||||||
public int Dimension { get; set; }
|
public int Dimension { get; set; }
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
@ -85,7 +84,6 @@ public class EmbeddingSetting
|
||||||
#region Reasoning model settings
|
#region Reasoning model settings
|
||||||
public class ReasoningSetting
|
public class ReasoningSetting
|
||||||
{
|
{
|
||||||
public bool IsDefault { get; set; }
|
|
||||||
public float Temperature { get; set; } = 1.0f;
|
public float Temperature { get; set; } = 1.0f;
|
||||||
public string? EffortLevel { get; set; }
|
public string? EffortLevel { get; set; }
|
||||||
}
|
}
|
||||||
|
|
@ -102,21 +100,13 @@ public class WebSearchSetting
|
||||||
#region Image model settings
|
#region Image model settings
|
||||||
public class ImageSetting
|
public class ImageSetting
|
||||||
{
|
{
|
||||||
public ImageReadSetting? Reading { get; set; }
|
|
||||||
public ImageGenerationSetting? Generation { get; set; }
|
public ImageGenerationSetting? Generation { get; set; }
|
||||||
public ImageEditSetting? Edit { get; set; }
|
public ImageEditSetting? Edit { get; set; }
|
||||||
public ImageVariationSetting? Variation { get; set; }
|
public ImageVariationSetting? Variation { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ImageReadSetting
|
|
||||||
{
|
|
||||||
public bool IsDefault { get; set; }
|
|
||||||
public string? ImageDetailLevel { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ImageGenerationSetting
|
public class ImageGenerationSetting
|
||||||
{
|
{
|
||||||
public bool IsDefault { get; set; }
|
|
||||||
public ModelSettingBase? Style { get; set; }
|
public ModelSettingBase? Style { get; set; }
|
||||||
public ModelSettingBase? Size { get; set; }
|
public ModelSettingBase? Size { get; set; }
|
||||||
public ModelSettingBase? Quality { get; set; }
|
public ModelSettingBase? Quality { get; set; }
|
||||||
|
|
@ -125,14 +115,12 @@ public class ImageGenerationSetting
|
||||||
|
|
||||||
public class ImageEditSetting
|
public class ImageEditSetting
|
||||||
{
|
{
|
||||||
public bool IsDefault { get; set; }
|
|
||||||
public ModelSettingBase? Size { get; set; }
|
public ModelSettingBase? Size { get; set; }
|
||||||
public ModelSettingBase? ResponseFormat { get; set; }
|
public ModelSettingBase? ResponseFormat { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ImageVariationSetting
|
public class ImageVariationSetting
|
||||||
{
|
{
|
||||||
public bool IsDefault { get; set; }
|
|
||||||
public ModelSettingBase? Size { get; set; }
|
public ModelSettingBase? Size { get; set; }
|
||||||
public ModelSettingBase? ResponseFormat { get; set; }
|
public ModelSettingBase? ResponseFormat { get; set; }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -101,9 +101,18 @@ public class EditImageFn : IFunctionCallback
|
||||||
{
|
{
|
||||||
var state = _services.GetRequiredService<IConversationStateService>();
|
var state = _services.GetRequiredService<IConversationStateService>();
|
||||||
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
||||||
|
var fileSettings = _services.GetRequiredService<FileHandlerSettings>();
|
||||||
|
|
||||||
var provider = state.GetState("image_edit_llm_provider");
|
var provider = state.GetState("image_edit_llm_provider");
|
||||||
var model = state.GetState("image_edit_llm_model");
|
var model = state.GetState("image_edit_llm_provider");
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
||||||
|
{
|
||||||
|
return (provider, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
provider = fileSettings?.Image?.Edit?.LlmProvider;
|
||||||
|
model = fileSettings?.Image?.Edit?.LlmModel;
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
||||||
{
|
{
|
||||||
|
|
@ -113,11 +122,6 @@ public class EditImageFn : IFunctionCallback
|
||||||
provider = "openai";
|
provider = "openai";
|
||||||
model = "gpt-image-1";
|
model = "gpt-image-1";
|
||||||
|
|
||||||
var models = llmProviderService.GetProviderModels(provider);
|
|
||||||
var foundModel = models.FirstOrDefault(x => x.Image?.Edit?.IsDefault == true)
|
|
||||||
?? models.FirstOrDefault(x => x.Image?.Edit != null);
|
|
||||||
|
|
||||||
model = foundModel?.Name ?? model;
|
|
||||||
return (provider, model);
|
return (provider, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,7 @@ public class GenerateImageFn : IFunctionCallback
|
||||||
{
|
{
|
||||||
var state = _services.GetRequiredService<IConversationStateService>();
|
var state = _services.GetRequiredService<IConversationStateService>();
|
||||||
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
||||||
|
var fileSettings = _services.GetRequiredService<FileHandlerSettings>();
|
||||||
|
|
||||||
var provider = state.GetState("image_generate_llm_provider");
|
var provider = state.GetState("image_generate_llm_provider");
|
||||||
var model = state.GetState("image_generate_llm_model");
|
var model = state.GetState("image_generate_llm_model");
|
||||||
|
|
@ -92,14 +93,17 @@ public class GenerateImageFn : IFunctionCallback
|
||||||
return (provider, model);
|
return (provider, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
provider = fileSettings?.Image?.Generation?.LlmProvider;
|
||||||
|
model = fileSettings?.Image?.Generation?.LlmModel;
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
||||||
|
{
|
||||||
|
return (provider, model);
|
||||||
|
}
|
||||||
|
|
||||||
provider = "openai";
|
provider = "openai";
|
||||||
model = "gpt-image-1";
|
model = "gpt-image-1";
|
||||||
|
|
||||||
var models = llmProviderService.GetProviderModels(provider);
|
|
||||||
var foundModel = models.FirstOrDefault(x => x.Image?.Generation?.IsDefault == true)
|
|
||||||
?? models.FirstOrDefault(x => x.Image?.Generation != null);
|
|
||||||
|
|
||||||
model = foundModel?.Name ?? model;
|
|
||||||
return (provider, model);
|
return (provider, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
using BotSharp.Abstraction.MLTasks.Settings;
|
|
||||||
using BotSharp.Abstraction.Routing;
|
using BotSharp.Abstraction.Routing;
|
||||||
|
|
||||||
namespace BotSharp.Plugin.FileHandler.Functions;
|
namespace BotSharp.Plugin.FileHandler.Functions;
|
||||||
|
|
@ -100,6 +99,7 @@ public class ReadImageFn : IFunctionCallback
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var (provider, model) = GetLlmProviderModel();
|
var (provider, model) = GetLlmProviderModel();
|
||||||
|
SetImageDetailLevel();
|
||||||
var completion = CompletionProvider.GetChatCompletion(_services, provider: provider, model: model);
|
var completion = CompletionProvider.GetChatCompletion(_services, provider: provider, model: model);
|
||||||
var response = await completion.GetChatCompletions(agent, dialogs);
|
var response = await completion.GetChatCompletions(agent, dialogs);
|
||||||
return response.Content;
|
return response.Content;
|
||||||
|
|
@ -116,6 +116,7 @@ public class ReadImageFn : IFunctionCallback
|
||||||
{
|
{
|
||||||
var state = _services.GetRequiredService<IConversationStateService>();
|
var state = _services.GetRequiredService<IConversationStateService>();
|
||||||
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
||||||
|
var fileSettings = _services.GetRequiredService<FileHandlerSettings>();
|
||||||
|
|
||||||
var provider = state.GetState("image_read_llm_provider");
|
var provider = state.GetState("image_read_llm_provider");
|
||||||
var model = state.GetState("image_read_llm_model");
|
var model = state.GetState("image_read_llm_model");
|
||||||
|
|
@ -125,14 +126,31 @@ public class ReadImageFn : IFunctionCallback
|
||||||
return (provider, model);
|
return (provider, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
provider = fileSettings?.Image?.Reading?.LlmProvider;
|
||||||
|
model = fileSettings?.Image?.Reading?.LlmModel;
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
||||||
|
{
|
||||||
|
return (provider, model);
|
||||||
|
}
|
||||||
|
|
||||||
provider = "openai";
|
provider = "openai";
|
||||||
model = "gpt-5-mini";
|
model = "gpt-5-mini";
|
||||||
|
|
||||||
var models = llmProviderService.GetProviderModels(provider);
|
|
||||||
var foundModel = models.FirstOrDefault(x => x.Image?.Reading?.IsDefault == true)
|
|
||||||
?? models.FirstOrDefault(x => x.Image?.Reading != null);
|
|
||||||
|
|
||||||
model = foundModel?.Name ?? model;
|
|
||||||
return (provider, model);
|
return (provider, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SetImageDetailLevel()
|
||||||
|
{
|
||||||
|
var state = _services.GetRequiredService<IConversationStateService>();
|
||||||
|
var fileSettings = _services.GetRequiredService<FileHandlerSettings>();
|
||||||
|
|
||||||
|
var key = "chat_image_detail_level";
|
||||||
|
var level = state.GetState(key);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(level) && !string.IsNullOrWhiteSpace(fileSettings.Image?.Reading?.ImageDetailLevel))
|
||||||
|
{
|
||||||
|
state.SetState(key, fileSettings.Image.Reading.ImageDetailLevel);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,7 @@ public class ReadPdfFn : IFunctionCallback
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var (provider, model) = GetLlmProviderModel();
|
var (provider, model) = GetLlmProviderModel();
|
||||||
|
SetImageDetailLevel();
|
||||||
var completion = CompletionProvider.GetChatCompletion(_services, provider: provider, model: model);
|
var completion = CompletionProvider.GetChatCompletion(_services, provider: provider, model: model);
|
||||||
var response = await completion.GetChatCompletions(agent, dialogs);
|
var response = await completion.GetChatCompletions(agent, dialogs);
|
||||||
return response.Content;
|
return response.Content;
|
||||||
|
|
@ -106,9 +107,18 @@ public class ReadPdfFn : IFunctionCallback
|
||||||
{
|
{
|
||||||
var state = _services.GetRequiredService<IConversationStateService>();
|
var state = _services.GetRequiredService<IConversationStateService>();
|
||||||
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
||||||
|
var fileSettings = _services.GetRequiredService<FileHandlerSettings>();
|
||||||
|
|
||||||
var provider = state.GetState("image_read_llm_provider");
|
var provider = state.GetState("pdf_read_llm_provider");
|
||||||
var model = state.GetState("image_read_llm_model");
|
var model = state.GetState("pdf_read_llm_model");
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
||||||
|
{
|
||||||
|
return (provider, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
provider = fileSettings?.Image?.Reading?.LlmProvider;
|
||||||
|
model = fileSettings?.Image?.Reading?.LlmModel;
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
||||||
{
|
{
|
||||||
|
|
@ -118,11 +128,20 @@ public class ReadPdfFn : IFunctionCallback
|
||||||
provider = "openai";
|
provider = "openai";
|
||||||
model = "gpt-5-mini";
|
model = "gpt-5-mini";
|
||||||
|
|
||||||
var models = llmProviderService.GetProviderModels(provider);
|
|
||||||
var foundModel = models.FirstOrDefault(x => x.Image?.Reading?.IsDefault == true)
|
|
||||||
?? models.FirstOrDefault(x => x.Image?.Reading != null);
|
|
||||||
|
|
||||||
model = foundModel?.Name ?? model;
|
|
||||||
return (provider, model);
|
return (provider, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SetImageDetailLevel()
|
||||||
|
{
|
||||||
|
var state = _services.GetRequiredService<IConversationStateService>();
|
||||||
|
var fileSettings = _services.GetRequiredService<FileHandlerSettings>();
|
||||||
|
|
||||||
|
var key = "chat_image_detail_level";
|
||||||
|
var level = state.GetState(key);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(level) && !string.IsNullOrWhiteSpace(fileSettings.Pdf?.Reading?.ImageDetailLevel))
|
||||||
|
{
|
||||||
|
state.SetState(key, fileSettings.Pdf.Reading.ImageDetailLevel);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,4 +2,55 @@ namespace BotSharp.Plugin.FileHandler.Settings;
|
||||||
|
|
||||||
public class FileHandlerSettings
|
public class FileHandlerSettings
|
||||||
{
|
{
|
||||||
|
public ImageSettings? Image { get; set; }
|
||||||
|
public PdfSettings? Pdf { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Image
|
||||||
|
public class ImageSettings
|
||||||
|
{
|
||||||
|
public ImageReadSettings? Reading { get; set; }
|
||||||
|
public ImageGenerationSettings? Generation { get; set; }
|
||||||
|
public ImageEditSettings? Edit { get; set; }
|
||||||
|
public ImageVariationSettings? Variation { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ImageReadSettings : FileLlmSettingBase
|
||||||
|
{
|
||||||
|
public string? ImageDetailLevel { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ImageGenerationSettings : FileLlmSettingBase
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ImageEditSettings : FileLlmSettingBase
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ImageVariationSettings : FileLlmSettingBase
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Pdf
|
||||||
|
public class PdfSettings
|
||||||
|
{
|
||||||
|
public PdfReadSettings? Reading { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class PdfReadSettings : FileLlmSettingBase
|
||||||
|
{
|
||||||
|
public bool ConvertToImage { get; set; }
|
||||||
|
public string? ImageDetailLevel { get; set; }
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public class FileLlmSettingBase
|
||||||
|
{
|
||||||
|
public string? LlmProvider { get; set; }
|
||||||
|
public string? LlmModel { get; set; }
|
||||||
}
|
}
|
||||||
|
|
@ -372,7 +372,7 @@ public class ChatCompletionProvider : IChatCompletion
|
||||||
filteredMessages = filteredMessages.Where((_, idx) => idx >= firstUserMsgIdx).ToList();
|
filteredMessages = filteredMessages.Where((_, idx) => idx >= firstUserMsgIdx).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
var imageDetailLevel = GetChatImageDetailLevel(state.GetState("chat_image_detail_level"));
|
var imageDetailLevel = ParseChatImageDetailLevel(state.GetState("chat_image_detail_level"));
|
||||||
foreach (var message in filteredMessages)
|
foreach (var message in filteredMessages)
|
||||||
{
|
{
|
||||||
if (message.Role == AgentRole.Function)
|
if (message.Role == AgentRole.Function)
|
||||||
|
|
@ -508,8 +508,8 @@ public class ChatCompletionProvider : IChatCompletion
|
||||||
{
|
{
|
||||||
temperature = settings.Reasoning.Temperature;
|
temperature = settings.Reasoning.Temperature;
|
||||||
var level = state.GetState("reasoning_effort_level")
|
var level = state.GetState("reasoning_effort_level")
|
||||||
.IfNullOrEmptyAs(agent?.LlmConfig?.ReasoningEffortLevel ?? string.Empty)
|
.IfNullOrEmptyAs(agent?.LlmConfig?.ReasoningEffortLevel)
|
||||||
.IfNullOrEmptyAs(settings?.Reasoning?.EffortLevel ?? string.Empty);
|
.IfNullOrEmptyAs(settings?.Reasoning?.EffortLevel);
|
||||||
reasoningEffortLevel = ParseReasoningEffortLevel(level);
|
reasoningEffortLevel = ParseReasoningEffortLevel(level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -561,13 +561,7 @@ public class ChatCompletionProvider : IChatCompletion
|
||||||
return effortLevel;
|
return effortLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ChatImageDetailLevel ParseChatImageDetailLevel(string? level)
|
||||||
private ChatImageDetailLevel GetChatImageDetailLevel(string level)
|
|
||||||
{
|
|
||||||
return ParseChatImageDetailLevel(level);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ChatImageDetailLevel ParseChatImageDetailLevel(string level)
|
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(level))
|
if (string.IsNullOrWhiteSpace(level))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -438,6 +438,36 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"FileHandler": {
|
||||||
|
"Image": {
|
||||||
|
"Reading": {
|
||||||
|
"LlmProvider": "openai",
|
||||||
|
"LlmModel": "gpt-5-mini",
|
||||||
|
"ImageDetailLevel": "auto"
|
||||||
|
},
|
||||||
|
"Generation": {
|
||||||
|
"LlmProvider": "openai",
|
||||||
|
"LlmModel": "dall-e-3"
|
||||||
|
},
|
||||||
|
"Edit": {
|
||||||
|
"LlmProvider": "openai",
|
||||||
|
"LlmModel": "dall-e-2"
|
||||||
|
},
|
||||||
|
"Variation": {
|
||||||
|
"LlmProvider": "",
|
||||||
|
"LlmModel": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Pdf": {
|
||||||
|
"Reading": {
|
||||||
|
"LlmProvider": "openai",
|
||||||
|
"LlmModel": "gpt-5-mini",
|
||||||
|
"ConvertToImage": true,
|
||||||
|
"ImageDetailLevel": "auto"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
"TencentCos": {
|
"TencentCos": {
|
||||||
"AppId": "",
|
"AppId": "",
|
||||||
"SecretId": "",
|
"SecretId": "",
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue