refine setting
This commit is contained in:
parent
d1118a691c
commit
939e9cfd4e
|
|
@ -99,15 +99,21 @@ public class WebSearchSetting
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#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 bool IsDefault { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -68,10 +68,20 @@ public class WebIntelligentSearchFn : IFunctionCallback
|
||||||
|
|
||||||
private (string, string) GetLlmProviderModel()
|
private (string, string) GetLlmProviderModel()
|
||||||
{
|
{
|
||||||
var provider = "openai";
|
var state = _services.GetRequiredService<IConversationStateService>();
|
||||||
var model = "gpt-4o-mini-search-preview";
|
|
||||||
|
|
||||||
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
||||||
|
|
||||||
|
var provider = state.GetState("web_search_llm_provider");
|
||||||
|
var model = state.GetState("web_search_llm_model");
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
||||||
|
{
|
||||||
|
return (provider, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
provider = "openai";
|
||||||
|
model = "gpt-4o-mini-search-preview";
|
||||||
|
|
||||||
var models = llmProviderService.GetProviderModels(provider);
|
var models = llmProviderService.GetProviderModels(provider);
|
||||||
var foundModel = models.FirstOrDefault(x => x.WebSearch?.IsDefault == true)
|
var foundModel = models.FirstOrDefault(x => x.WebSearch?.IsDefault == true)
|
||||||
?? models.FirstOrDefault(x => x.WebSearch != null);
|
?? models.FirstOrDefault(x => x.WebSearch != null);
|
||||||
|
|
|
||||||
|
|
@ -99,10 +99,20 @@ public class EditImageFn : IFunctionCallback
|
||||||
|
|
||||||
private (string, string) GetLlmProviderModel()
|
private (string, string) GetLlmProviderModel()
|
||||||
{
|
{
|
||||||
var provider = "openai";
|
var state = _services.GetRequiredService<IConversationStateService>();
|
||||||
var model = "gpt-image-1";
|
|
||||||
|
|
||||||
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
||||||
|
|
||||||
|
var provider = state.GetState("image_edit_llm_provider");
|
||||||
|
var model = state.GetState("image_edit_llm_model");
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
||||||
|
{
|
||||||
|
return (provider, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
provider = "openai";
|
||||||
|
model = "gpt-image-1";
|
||||||
|
|
||||||
var models = llmProviderService.GetProviderModels(provider);
|
var models = llmProviderService.GetProviderModels(provider);
|
||||||
var foundModel = models.FirstOrDefault(x => x.Image?.Edit?.IsDefault == true)
|
var foundModel = models.FirstOrDefault(x => x.Image?.Edit?.IsDefault == true)
|
||||||
?? models.FirstOrDefault(x => x.Image?.Edit != null);
|
?? models.FirstOrDefault(x => x.Image?.Edit != null);
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,7 @@ public class GenerateImageFn : IFunctionCallback
|
||||||
{
|
{
|
||||||
Id = fromAgent?.Id ?? BuiltInAgentId.UtilityAssistant,
|
Id = fromAgent?.Id ?? BuiltInAgentId.UtilityAssistant,
|
||||||
Name = fromAgent?.Name ?? "Utility Assistant",
|
Name = fromAgent?.Name ?? "Utility Assistant",
|
||||||
Instruction = args?.ImageDescription,
|
Instruction = args?.ImageDescription
|
||||||
TemplateDict = new Dictionary<string, object>()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var response = await GetImageGeneration(agent, message, args?.ImageDescription);
|
var response = await GetImageGeneration(agent, message, args?.ImageDescription);
|
||||||
|
|
@ -82,10 +81,20 @@ public class GenerateImageFn : IFunctionCallback
|
||||||
|
|
||||||
private (string, string) GetLlmProviderModel()
|
private (string, string) GetLlmProviderModel()
|
||||||
{
|
{
|
||||||
var provider = "openai";
|
var state = _services.GetRequiredService<IConversationStateService>();
|
||||||
var model = "gpt-image-1";
|
|
||||||
|
|
||||||
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
||||||
|
|
||||||
|
var provider = state.GetState("image_generate_llm_provider");
|
||||||
|
var model = state.GetState("image_generate_llm_model");
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
||||||
|
{
|
||||||
|
return (provider, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
provider = "openai";
|
||||||
|
model = "gpt-image-1";
|
||||||
|
|
||||||
var models = llmProviderService.GetProviderModels(provider);
|
var models = llmProviderService.GetProviderModels(provider);
|
||||||
var foundModel = models.FirstOrDefault(x => x.Image?.Generation?.IsDefault == true)
|
var foundModel = models.FirstOrDefault(x => x.Image?.Generation?.IsDefault == true)
|
||||||
?? models.FirstOrDefault(x => x.Image?.Generation != null);
|
?? models.FirstOrDefault(x => x.Image?.Generation != null);
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
using BotSharp.Abstraction.MLTasks.Settings;
|
||||||
using BotSharp.Abstraction.Routing;
|
using BotSharp.Abstraction.Routing;
|
||||||
|
|
||||||
namespace BotSharp.Plugin.FileHandler.Functions;
|
namespace BotSharp.Plugin.FileHandler.Functions;
|
||||||
|
|
@ -36,7 +37,7 @@ public class ReadImageFn : IFunctionCallback
|
||||||
Id = fromAgent?.Id ?? BuiltInAgentId.UtilityAssistant,
|
Id = fromAgent?.Id ?? BuiltInAgentId.UtilityAssistant,
|
||||||
Name = fromAgent?.Name ?? "Utility Assistant",
|
Name = fromAgent?.Name ?? "Utility Assistant",
|
||||||
Instruction = fromAgent?.Instruction ?? args?.UserRequest ?? "Please describe the image(s).",
|
Instruction = fromAgent?.Instruction ?? args?.UserRequest ?? "Please describe the image(s).",
|
||||||
TemplateDict = new Dictionary<string, object>()
|
LlmConfig = fromAgent?.LlmConfig ?? new()
|
||||||
};
|
};
|
||||||
|
|
||||||
var wholeDialogs = routingCtx.GetDialogs();
|
var wholeDialogs = routingCtx.GetDialogs();
|
||||||
|
|
@ -98,8 +99,7 @@ public class ReadImageFn : IFunctionCallback
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var provider = "openai";
|
var (provider, model) = GetLlmProviderModel();
|
||||||
var model = "gpt-5-mini";
|
|
||||||
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;
|
||||||
|
|
@ -111,4 +111,28 @@ public class ReadImageFn : IFunctionCallback
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private (string, string) GetLlmProviderModel()
|
||||||
|
{
|
||||||
|
var state = _services.GetRequiredService<IConversationStateService>();
|
||||||
|
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
||||||
|
|
||||||
|
var provider = state.GetState("image_read_llm_provider");
|
||||||
|
var model = state.GetState("image_read_llm_model");
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
||||||
|
{
|
||||||
|
return (provider, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
provider = "openai";
|
||||||
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ public class ReadPdfFn : IFunctionCallback
|
||||||
Id = fromAgent?.Id ?? BuiltInAgentId.UtilityAssistant,
|
Id = fromAgent?.Id ?? BuiltInAgentId.UtilityAssistant,
|
||||||
Name = fromAgent?.Name ?? "Utility Assistant",
|
Name = fromAgent?.Name ?? "Utility Assistant",
|
||||||
Instruction = fromAgent?.Instruction ?? args?.UserRequest ?? "Please describe the pdf file(s).",
|
Instruction = fromAgent?.Instruction ?? args?.UserRequest ?? "Please describe the pdf file(s).",
|
||||||
TemplateDict = new Dictionary<string, object>()
|
LlmConfig = fromAgent?.LlmConfig ?? new()
|
||||||
};
|
};
|
||||||
|
|
||||||
var wholeDialogs = routingCtx.GetDialogs();
|
var wholeDialogs = routingCtx.GetDialogs();
|
||||||
|
|
@ -89,8 +89,7 @@ public class ReadPdfFn : IFunctionCallback
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var provider = "openai";
|
var (provider, model) = GetLlmProviderModel();
|
||||||
var model = "gpt-5-mini";
|
|
||||||
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;
|
||||||
|
|
@ -102,4 +101,28 @@ public class ReadPdfFn : IFunctionCallback
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private (string, string) GetLlmProviderModel()
|
||||||
|
{
|
||||||
|
var state = _services.GetRequiredService<IConversationStateService>();
|
||||||
|
var llmProviderService = _services.GetRequiredService<ILlmProviderService>();
|
||||||
|
|
||||||
|
var provider = state.GetState("image_read_llm_provider");
|
||||||
|
var model = state.GetState("image_read_llm_model");
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(provider) && !string.IsNullOrEmpty(model))
|
||||||
|
{
|
||||||
|
return (provider, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
provider = "openai";
|
||||||
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -320,6 +320,7 @@ public class ChatCompletionProvider : IChatCompletion
|
||||||
protected (string, IEnumerable<ChatMessage>, ChatCompletionOptions) PrepareOptions(Agent agent, List<RoleDialogModel> conversations)
|
protected (string, IEnumerable<ChatMessage>, ChatCompletionOptions) PrepareOptions(Agent agent, List<RoleDialogModel> conversations)
|
||||||
{
|
{
|
||||||
var agentService = _services.GetRequiredService<IAgentService>();
|
var agentService = _services.GetRequiredService<IAgentService>();
|
||||||
|
var state = _services.GetRequiredService<IConversationStateService>();
|
||||||
var fileStorage = _services.GetRequiredService<IFileStorageService>();
|
var fileStorage = _services.GetRequiredService<IFileStorageService>();
|
||||||
var settingsService = _services.GetRequiredService<ILlmProviderService>();
|
var settingsService = _services.GetRequiredService<ILlmProviderService>();
|
||||||
var settings = settingsService.GetSetting(Provider, _model);
|
var settings = settingsService.GetSetting(Provider, _model);
|
||||||
|
|
@ -371,6 +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"));
|
||||||
foreach (var message in filteredMessages)
|
foreach (var message in filteredMessages)
|
||||||
{
|
{
|
||||||
if (message.Role == AgentRole.Function)
|
if (message.Role == AgentRole.Function)
|
||||||
|
|
@ -395,20 +397,20 @@ public class ChatCompletionProvider : IChatCompletion
|
||||||
if (!string.IsNullOrEmpty(file.FileData))
|
if (!string.IsNullOrEmpty(file.FileData))
|
||||||
{
|
{
|
||||||
var (contentType, binary) = FileUtility.GetFileInfoFromData(file.FileData);
|
var (contentType, binary) = FileUtility.GetFileInfoFromData(file.FileData);
|
||||||
var contentPart = ChatMessageContentPart.CreateImagePart(binary, contentType.IfNullOrEmptyAs(file.ContentType), ChatImageDetailLevel.Auto);
|
var contentPart = ChatMessageContentPart.CreateImagePart(binary, contentType.IfNullOrEmptyAs(file.ContentType), imageDetailLevel);
|
||||||
contentParts.Add(contentPart);
|
contentParts.Add(contentPart);
|
||||||
}
|
}
|
||||||
else if (!string.IsNullOrEmpty(file.FileStorageUrl))
|
else if (!string.IsNullOrEmpty(file.FileStorageUrl))
|
||||||
{
|
{
|
||||||
var contentType = FileUtility.GetFileContentType(file.FileStorageUrl);
|
var contentType = FileUtility.GetFileContentType(file.FileStorageUrl);
|
||||||
var binary = fileStorage.GetFileBytes(file.FileStorageUrl);
|
var binary = fileStorage.GetFileBytes(file.FileStorageUrl);
|
||||||
var contentPart = ChatMessageContentPart.CreateImagePart(binary, contentType.IfNullOrEmptyAs(file.ContentType), ChatImageDetailLevel.Auto);
|
var contentPart = ChatMessageContentPart.CreateImagePart(binary, contentType.IfNullOrEmptyAs(file.ContentType), imageDetailLevel);
|
||||||
contentParts.Add(contentPart);
|
contentParts.Add(contentPart);
|
||||||
}
|
}
|
||||||
else if (!string.IsNullOrEmpty(file.FileUrl))
|
else if (!string.IsNullOrEmpty(file.FileUrl))
|
||||||
{
|
{
|
||||||
var uri = new Uri(file.FileUrl);
|
var uri = new Uri(file.FileUrl);
|
||||||
var contentPart = ChatMessageContentPart.CreateImagePart(uri, ChatImageDetailLevel.Auto);
|
var contentPart = ChatMessageContentPart.CreateImagePart(uri, imageDetailLevel);
|
||||||
contentParts.Add(contentPart);
|
contentParts.Add(contentPart);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -559,6 +561,35 @@ public class ChatCompletionProvider : IChatCompletion
|
||||||
return effortLevel;
|
return effortLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private ChatImageDetailLevel GetChatImageDetailLevel(string level)
|
||||||
|
{
|
||||||
|
return ParseChatImageDetailLevel(level);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ChatImageDetailLevel ParseChatImageDetailLevel(string level)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(level))
|
||||||
|
{
|
||||||
|
return ChatImageDetailLevel.Auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
var imageLevel = ChatImageDetailLevel.Auto;
|
||||||
|
switch (level.ToLower())
|
||||||
|
{
|
||||||
|
case "low":
|
||||||
|
imageLevel = ChatImageDetailLevel.Low;
|
||||||
|
break;
|
||||||
|
case "high":
|
||||||
|
imageLevel = ChatImageDetailLevel.High;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return imageLevel;
|
||||||
|
}
|
||||||
|
|
||||||
public void SetModelName(string model)
|
public void SetModelName(string model)
|
||||||
{
|
{
|
||||||
_model = model;
|
_model = model;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue