Merge branch 'SciSharp:master' into master
This commit is contained in:
commit
68d444a541
|
|
@ -30,6 +30,8 @@ public class PageActionArgs
|
|||
/// </summary>
|
||||
public string[]? IncludeResponseUrls { get; set; }
|
||||
|
||||
public List<string>? Selectors { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// If set to true, the response will be stored in memory
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -3,5 +3,6 @@ namespace BotSharp.Abstraction.Plugins.Models
|
|||
public class PluginFilter
|
||||
{
|
||||
public Pagination Pager { get; set; } = new Pagination();
|
||||
public IEnumerable<string>? Names { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,12 +40,25 @@ public class SideCarAspect
|
|||
return typeof(SideCarAspect).GetMethod(name, BindingFlags.NonPublic | BindingFlags.Static);
|
||||
}
|
||||
|
||||
private object CallAsyncMethod(IServiceProvider serviceProvider, Type retType, string methodName, Func<object[], object> target, object[] args)
|
||||
|
||||
private (IConversationSideCar?, MethodInfo?) GetSideCarMethod(IServiceProvider serviceProvider, string methodName, object[] args)
|
||||
{
|
||||
var sidecar = serviceProvider.GetService<IConversationSideCar>();
|
||||
var sidecarMethod = sidecar?.GetType()?.GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance);
|
||||
var argTypes = args.Select(x => x.GetType()).ToArray();
|
||||
var sidecarMethod = sidecar?.GetType()?.GetMethods(BindingFlags.Public | BindingFlags.Instance)
|
||||
.FirstOrDefault(x => x.Name == methodName
|
||||
&& x.GetParameters().Length == argTypes.Length
|
||||
&& x.GetParameters().Select(p => p.ParameterType)
|
||||
.Zip(argTypes, (paramType, argType) => paramType.IsAssignableFrom(argType)).All(y => y));
|
||||
|
||||
return (sidecar, sidecarMethod);
|
||||
}
|
||||
|
||||
private object CallAsyncMethod(IServiceProvider serviceProvider, Type retType, string methodName, Func<object[], object> target, object[] args)
|
||||
{
|
||||
object value;
|
||||
|
||||
var (sidecar, sidecarMethod) = GetSideCarMethod(serviceProvider, methodName, args);
|
||||
var enabled = sidecar != null && sidecar.IsEnabled() && sidecarMethod != null;
|
||||
|
||||
if (retType == typeof(void))
|
||||
|
|
@ -77,11 +90,10 @@ public class SideCarAspect
|
|||
|
||||
private object CallSyncMethod(IServiceProvider serviceProvider, Type retType, string methodName, Func<object[], object> target, object[] args)
|
||||
{
|
||||
var sidecar = serviceProvider.GetService<IConversationSideCar>();
|
||||
var sidecarMethod = sidecar?.GetType()?.GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance);
|
||||
|
||||
object value;
|
||||
var enabled = sidecar != null && sidecarMethod != null && sidecar.IsEnabled();
|
||||
|
||||
var (sidecar, sidecarMethod) = GetSideCarMethod(serviceProvider, methodName, args);
|
||||
var enabled = sidecar != null && sidecar.IsEnabled() && sidecarMethod != null;
|
||||
|
||||
if (retType == typeof(void))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -126,6 +126,12 @@ public class PluginLoader
|
|||
var plugins = GetPlugins(services);
|
||||
var pager = filter?.Pager ?? new Pagination();
|
||||
|
||||
// Apply filter
|
||||
if (!filter.Names.IsNullOrEmpty())
|
||||
{
|
||||
plugins = plugins.Where(x => filter.Names.Any(n => x.Name.IsEqualTo(n))).ToList();
|
||||
}
|
||||
|
||||
return new PagedItems<PluginDef>
|
||||
{
|
||||
Items = plugins.Skip(pager.Offset).Take(pager.Size),
|
||||
|
|
|
|||
|
|
@ -64,18 +64,13 @@ public class HandleExcelRequestFn : IFunctionCallback
|
|||
message.Content = "No excel files found in the conversation";
|
||||
return true;
|
||||
}
|
||||
if (!DeleteTable())
|
||||
{
|
||||
message.Content = "Failed to clear existing tables. Please manually delete all existing tables";
|
||||
}
|
||||
else
|
||||
{
|
||||
var resultList = GetResponeFromDialogs(dialogs);
|
||||
var states = _serviceProvider.GetRequiredService<IConversationStateService>();
|
||||
|
||||
message.Content = GenerateSqlExecutionSummary(resultList);
|
||||
states.SetState("excel_import_result",message.Content);
|
||||
}
|
||||
var resultList = GetResponeFromDialogs(dialogs);
|
||||
var states = _serviceProvider.GetRequiredService<IConversationStateService>();
|
||||
|
||||
message.Content = GenerateSqlExecutionSummary(resultList);
|
||||
states.SetState("excel_import_result",message.Content);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -122,28 +117,12 @@ public class HandleExcelRequestFn : IFunctionCallback
|
|||
var bytes = _fileStorage.GetFileBytes(file.FileStorageUrl);
|
||||
var workbook = ConvertToWorkBook(bytes);
|
||||
|
||||
|
||||
//var dbService = CreateDbService(DbServiceType.MySql);
|
||||
var currentCommandList = _mySqlService.WriteExcelDataToDB(workbook);
|
||||
sqlCommandList.AddRange(currentCommandList);
|
||||
}
|
||||
return sqlCommandList;
|
||||
}
|
||||
|
||||
private bool DeleteTable()
|
||||
{
|
||||
try
|
||||
{
|
||||
//_mySqlService.DeleteTableSqlQuery();
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Failed to delete table");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private string GenerateSqlExecutionSummary(List<SqlContextOut> messageList)
|
||||
{
|
||||
var stringBuilder = new StringBuilder();
|
||||
|
|
|
|||
|
|
@ -31,13 +31,6 @@ namespace BotSharp.Plugin.ExcelHandler.Services
|
|||
{
|
||||
try
|
||||
{
|
||||
/*using var mySqlDbConnection = _mySqlDbHelpers.GetDbConnection();
|
||||
var tableNames = GetAllTableSchema(mySqlDbConnection);
|
||||
if (tableNames.IsNullOrEmpty())
|
||||
{
|
||||
return true;
|
||||
}*/
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
@ -232,7 +225,7 @@ namespace BotSharp.Plugin.ExcelHandler.Services
|
|||
_columnTypes?.Insert(0, "INT UNSIGNED AUTO_INCREMENT");
|
||||
}*/
|
||||
|
||||
var createTableSql = $"CREATE TABLE if not exists {tableName} ( \n";
|
||||
var createTableSql = $"DROP TABLE IF EXISTS {tableName}; CREATE TABLE if not exists {tableName} ( \n";
|
||||
createTableSql += string.Join(", \n", headerColumns.Select((x, i) => $"`{x}` {_columnTypes[i]}"));
|
||||
var indexSql = string.Join(", \n", headerColumns.Select(x => $"KEY `idx_{tableName}_{x}` (`{x}`)"));
|
||||
createTableSql += $", \n{indexSql}\n);";
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using BotSharp.Abstraction.Plugins.Models;
|
||||
using BotSharp.Abstraction.Settings;
|
||||
using BotSharp.Abstraction.Users.Enums;
|
||||
using BotSharp.Plugin.KnowledgeBase.Converters;
|
||||
using BotSharp.Plugin.KnowledgeBase.Hooks;
|
||||
using BotSharp.Plugin.KnowledgeBase.Services;
|
||||
|
|
@ -25,7 +26,6 @@ public class KnowledgeBasePlugin : IBotSharpPlugin
|
|||
services.AddSingleton<IPdf2TextConverter, PigPdf2TextConverter>();
|
||||
services.AddScoped<IAgentUtilityHook, KnowledgeBaseUtilityHook>();
|
||||
services.AddScoped<IAgentHook, KnowledgeBaseAgentHook>();
|
||||
|
||||
services.AddScoped<IKnowledgeService, KnowledgeService>();
|
||||
}
|
||||
|
||||
|
|
@ -34,6 +34,7 @@ public class KnowledgeBasePlugin : IBotSharpPlugin
|
|||
var section = menu.First(x => x.Label == "Apps");
|
||||
menu.Add(new PluginMenuDef("Knowledge Base", icon: "bx bx-book-open", weight: section.Weight + 1)
|
||||
{
|
||||
Roles = new List<string> { UserRole.Root, UserRole.Admin },
|
||||
SubMenu = new List<PluginMenuDef>
|
||||
{
|
||||
new PluginMenuDef("Q & A", link: "page/knowledge-base/question-answer"),
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ public class VerifyDictionaryTerm : IFunctionCallback
|
|||
var render = _services.GetRequiredService<ITemplateRender>();
|
||||
var knowledgeHooks = _services.GetServices<IKnowledgeHook>();
|
||||
|
||||
var agent = await agentService.GetAgent(BuiltInAgentId.Planner);
|
||||
var agent = await agentService.GetAgent(BuiltInAgentId.SqlDriver);
|
||||
var template = agent.Templates.FirstOrDefault(x => x.Name == "database.dictionary.sql")?.Content ?? string.Empty;
|
||||
var responseFormat = JsonSerializer.Serialize(new LookupDictionary{ });
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace BotSharp.Plugin.SqlDriver.Hooks;
|
|||
|
||||
public class SqlDictionaryLookupHook : AgentHookBase, IAgentHook
|
||||
{
|
||||
private const string SQL_EXECUTOR_TEMPLATE = "sql_dictionary_lookup.fn";
|
||||
private const string SQL_EXECUTOR_TEMPLATE = "verify_dictionary_term.fn";
|
||||
private IEnumerable<string> _targetSqlExecutorFunctions = new List<string>
|
||||
{
|
||||
"verify_dictionary_term",
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
using Microsoft.Playwright;
|
||||
|
||||
namespace BotSharp.Plugin.WebDriver.Drivers.PlaywrightDriver;
|
||||
|
||||
public partial class PlaywrightWebDriver
|
||||
|
|
@ -47,15 +49,37 @@ public partial class PlaywrightWebDriver
|
|||
|
||||
var response = await page.GotoAsync(args.Url, new PageGotoOptions
|
||||
{
|
||||
Timeout = args.Timeout
|
||||
Timeout = args.Timeout > 0 ? args.Timeout : 30000
|
||||
});
|
||||
|
||||
if (args.Selectors != null)
|
||||
{
|
||||
// 使用传入的选择器列表进行并行等待
|
||||
var tasks =args.Selectors.Select(selector =>
|
||||
page.WaitForSelectorAsync(selector, new PageWaitForSelectorOptions
|
||||
{
|
||||
Timeout = args.Timeout > 0 ? args.Timeout : 30000
|
||||
})
|
||||
).ToArray();
|
||||
|
||||
await Task.WhenAll(tasks);
|
||||
|
||||
// 在此处提取所有选择器的 HTML 内容
|
||||
var contentTasks = args.Selectors.Select(selector => page.InnerHTMLAsync(selector)).ToArray();
|
||||
var contents = await Task.WhenAll(contentTasks);
|
||||
|
||||
result.IsSuccess = true;
|
||||
result.Body = string.Join(", ", contents.Select((content, index) => $"{args.Selectors[index]}: {content}"));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
await page.WaitForLoadStateAsync(LoadState.DOMContentLoaded);
|
||||
if (args.WaitForNetworkIdle)
|
||||
{
|
||||
await page.WaitForLoadStateAsync(LoadState.NetworkIdle, new PageWaitForLoadStateOptions
|
||||
{
|
||||
Timeout = args.Timeout
|
||||
Timeout = args.Timeout > 0 ? args.Timeout : 30000
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue