Merge pull request #293 from hchen2020/master

.net 8.0
This commit is contained in:
Haiping 2024-02-08 17:55:29 -06:00 committed by GitHub
commit b86bf024a3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 59 additions and 45 deletions

View file

@ -1,9 +1,9 @@
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<LangVersion>10.0</LangVersion> <LangVersion>10.0</LangVersion>
<BotSharpVersion>0.22.0</BotSharpVersion> <BotSharpVersion>0.22.0</BotSharpVersion>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild> <GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<GenerateDocumentationFile>false</GenerateDocumentationFile> <GenerateDocumentationFile>false</GenerateDocumentationFile>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View file

@ -30,24 +30,22 @@ public class SequentialPlanner : IPlaner
if (decomposation.TotalRemainingSteps > 0 && _lastInst != null) if (decomposation.TotalRemainingSteps > 0 && _lastInst != null)
{ {
_lastInst.Response = decomposation.Description; _lastInst.Response = decomposation.Description;
_lastInst.Reason = $"{decomposation.TotalRemainingSteps} left."; _lastInst.Reason = $"Having {decomposation.TotalRemainingSteps} steps left.";
dialogs.Add(new RoleDialogModel(AgentRole.User, decomposation.Description)
{
CurrentAgentId = router.Id,
MessageId = messageId
});
return _lastInst; return _lastInst;
} }
else if (decomposation.TotalRemainingSteps == 0 || decomposation.ShouldStop) else if (decomposation.TotalRemainingSteps == 0 || decomposation.ShouldStop)
{ {
// Tell router all steps are done if (!string.IsNullOrEmpty(decomposation.StopReason))
dialogs.Add(new RoleDialogModel(AgentRole.Assistant, decomposation.StopReason)
{ {
CurrentAgentId = router.Id, // Tell router all steps are done
MessageId = messageId dialogs.Add(new RoleDialogModel(AgentRole.Assistant, decomposation.StopReason)
}); {
router.TemplateDict["conversation"] = router.TemplateDict["conversation"].ToString().TrimEnd() + CurrentAgentId = router.Id,
$"\r\n{router.Name}: {decomposation.StopReason}"; MessageId = messageId
});
router.TemplateDict["conversation"] = router.TemplateDict["conversation"].ToString().TrimEnd() +
$"\r\n{router.Name}: {decomposation.StopReason}";
}
} }
var next = GetNextStepPrompt(router); var next = GetNextStepPrompt(router);
@ -177,7 +175,6 @@ public class SequentialPlanner : IPlaner
}, dialogs); }, dialogs);
text = response.Content; text = response.Content;
Console.WriteLine(text, Color.OrangeRed);
inst = response.Content.JsonContent<DecomposedStep>(); inst = response.Content.JsonContent<DecomposedStep>();
break; break;
} }

View file

@ -6,7 +6,7 @@ Tell me what is the first remaining step from user steps that have not been comp
Output in JSON Output in JSON
{ {
"description": "step detail with arguments", "description": "step detail with arguments",
"total_remaining_steps": -1, "total_remaining_steps": 0,
"should_stop": false, "should_stop": false,
"stop_reason": "the reason why it should total remaining steps is zero" "stop_reason": "the reason why it should stop"
} }

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>$(TargetFramework)</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<LangVersion>$(LangVersion)</LangVersion> <LangVersion>$(LangVersion)</LangVersion>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>$(TargetFramework)</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<LangVersion>$(LangVersion)</LangVersion> <LangVersion>$(LangVersion)</LangVersion>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>$(TargetFramework)</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<LangVersion>$(LangVersion)</LangVersion> <LangVersion>$(LangVersion)</LangVersion>
<VersionPrefix>$(BotSharpVersion)</VersionPrefix> <VersionPrefix>$(BotSharpVersion)</VersionPrefix>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>$(TargetFramework)</TargetFramework>
<LangVersion>$(LangVersion)</LangVersion> <LangVersion>$(LangVersion)</LangVersion>
<VersionPrefix>$(BotSharpVersion)</VersionPrefix> <VersionPrefix>$(BotSharpVersion)</VersionPrefix>
<GeneratePackageOnBuild>$(GeneratePackageOnBuild)</GeneratePackageOnBuild> <GeneratePackageOnBuild>$(GeneratePackageOnBuild)</GeneratePackageOnBuild>

View file

@ -32,7 +32,7 @@ public class PlaywrightInstance : IDisposable
string tempFolderPath = $"{Path.GetTempPath()}\\playwright\\{Guid.NewGuid()}"; string tempFolderPath = $"{Path.GetTempPath()}\\playwright\\{Guid.NewGuid()}";
_context = await _playwright.Chromium.LaunchPersistentContextAsync(tempFolderPath, new BrowserTypeLaunchPersistentContextOptions _context = await _playwright.Chromium.LaunchPersistentContextAsync(tempFolderPath, new BrowserTypeLaunchPersistentContextOptions
{ {
Headless = true, Headless = false,
Channel = "chrome", Channel = "chrome",
IgnoreDefaultArgs = new[] IgnoreDefaultArgs = new[]
{ {

View file

@ -27,6 +27,12 @@ public partial class PlaywrightWebDriver
count = await elements.CountAsync(); count = await elements.CountAsync();
} }
if (count == 0)
{
elements = _instance.Page.GetByText(actionParams.Context.ElementName);
count = await elements.CountAsync();
}
if (count == 0) if (count == 0)
{ {
// Infer element if not found // Infer element if not found

View file

@ -48,6 +48,12 @@ public partial class PlaywrightWebDriver
else if (count > 1) else if (count > 1)
{ {
_logger.LogWarning($"Multiple elements are found by keyword {actionParams.Context.ElementText}"); _logger.LogWarning($"Multiple elements are found by keyword {actionParams.Context.ElementText}");
var all = await elements.AllAsync();
foreach (var element in all)
{
var content = await element.TextContentAsync();
_logger.LogWarning(content);
}
} }
return false; return false;

View file

@ -22,9 +22,10 @@ public class ChangeCheckboxFn : IFunctionCallback
var agent = await agentService.LoadAgent(message.CurrentAgentId); var agent = await agentService.LoadAgent(message.CurrentAgentId);
var result = await _browser.ChangeCheckbox(new BrowserActionParams(agent, args, message.MessageId)); var result = await _browser.ChangeCheckbox(new BrowserActionParams(agent, args, message.MessageId));
var content = $"{(args.UpdateValue == "check" ? "Check" : "Uncheck")} checkbox of '{args.ElementText}'";
message.Content = result ? message.Content = result ?
$"{(args.UpdateValue == "check" ? "Checked" : "Unchecked")} checkbox of '{args.ElementText}' successfully" : $"{content} successfully" :
"Failed"; $"{content} failed";
var webDriverService = _services.GetRequiredService<WebDriverService>(); var webDriverService = _services.GetRequiredService<WebDriverService>();
var path = webDriverService.GetScreenshotFilePath(message.MessageId); var path = webDriverService.GetScreenshotFilePath(message.MessageId);

View file

@ -22,9 +22,10 @@ public class ChangeListValueFn : IFunctionCallback
var agent = await agentService.LoadAgent(message.CurrentAgentId); var agent = await agentService.LoadAgent(message.CurrentAgentId);
var result = await _browser.ChangeListValue(new BrowserActionParams(agent, args, message.MessageId)); var result = await _browser.ChangeListValue(new BrowserActionParams(agent, args, message.MessageId));
var content = $"Change value to '{args.UpdateValue}' for {args.ElementName}";
message.Content = result ? message.Content = result ?
$"Changed value to '{args.UpdateValue}' for {args.ElementName} successfully" : $"{content} successfully" :
"Failed"; $"{content} failed";
var webDriverService = _services.GetRequiredService<WebDriverService>(); var webDriverService = _services.GetRequiredService<WebDriverService>();
var path = webDriverService.GetScreenshotFilePath(message.MessageId); var path = webDriverService.GetScreenshotFilePath(message.MessageId);

View file

@ -22,9 +22,10 @@ public class CheckRadioButtonFn : IFunctionCallback
var agent = await agentService.LoadAgent(message.CurrentAgentId); var agent = await agentService.LoadAgent(message.CurrentAgentId);
var result = await _browser.CheckRadioButton(new BrowserActionParams(agent, args, message.MessageId)); var result = await _browser.CheckRadioButton(new BrowserActionParams(agent, args, message.MessageId));
message.Content = result ? var content = $"Check value of '{args.UpdateValue}' for radio button '{args.ElementName}'";
$"Checked value of '{args.UpdateValue}' for radio button '{args.ElementName}' successfully" : message.Content = result ?
"Failed"; $"{content} successfully" :
$"{content} failed";
var webDriverService = _services.GetRequiredService<WebDriverService>(); var webDriverService = _services.GetRequiredService<WebDriverService>();
var path = webDriverService.GetScreenshotFilePath(message.MessageId); var path = webDriverService.GetScreenshotFilePath(message.MessageId);

View file

@ -22,9 +22,10 @@ public class ClickButtonFn : IFunctionCallback
var agent = await agentService.LoadAgent(message.CurrentAgentId); var agent = await agentService.LoadAgent(message.CurrentAgentId);
var result = await _browser.ClickButton(new BrowserActionParams(agent, args, message.MessageId)); var result = await _browser.ClickButton(new BrowserActionParams(agent, args, message.MessageId));
var content = $"Click button of '{args.ElementName}'";
message.Content = result ? message.Content = result ?
$"Clicked button of '{args.ElementName}' successfully" : $"{content} successfully" :
"Failed"; $"{content} failed";
var webDriverService = _services.GetRequiredService<WebDriverService>(); var webDriverService = _services.GetRequiredService<WebDriverService>();
var path = webDriverService.GetScreenshotFilePath(message.MessageId); var path = webDriverService.GetScreenshotFilePath(message.MessageId);

View file

@ -22,9 +22,10 @@ public class ClickElementFn : IFunctionCallback
var agent = await agentService.LoadAgent(message.CurrentAgentId); var agent = await agentService.LoadAgent(message.CurrentAgentId);
var result = await _browser.ClickElement(new BrowserActionParams(agent, args, message.MessageId)); var result = await _browser.ClickElement(new BrowserActionParams(agent, args, message.MessageId));
var content = $"Click element {args.MatchRule} text '{args.ElementText}'";
message.Content = result ? message.Content = result ?
$"Clicked element {args.MatchRule} text '{args.ElementText}' successfully" : $"{content} successfully" :
"Failed"; $"{content} failed";
var webDriverService = _services.GetRequiredService<WebDriverService>(); var webDriverService = _services.GetRequiredService<WebDriverService>();
var path = webDriverService.GetScreenshotFilePath(message.MessageId); var path = webDriverService.GetScreenshotFilePath(message.MessageId);

View file

@ -22,7 +22,7 @@ public class InputUserPasswordFn : IFunctionCallback
var agent = await agentService.LoadAgent(message.CurrentAgentId); var agent = await agentService.LoadAgent(message.CurrentAgentId);
var result = await _browser.InputUserPassword(new BrowserActionParams(agent, args, message.MessageId)); var result = await _browser.InputUserPassword(new BrowserActionParams(agent, args, message.MessageId));
message.Content = result ? "Input password successfully" : "Failed"; message.Content = result ? "Input password successfully" : "Input password failed";
var webDriverService = _services.GetRequiredService<WebDriverService>(); var webDriverService = _services.GetRequiredService<WebDriverService>();
var path = webDriverService.GetScreenshotFilePath(message.MessageId); var path = webDriverService.GetScreenshotFilePath(message.MessageId);

View file

@ -29,8 +29,8 @@ public class InputUserTextFn : IFunctionCallback
} }
message.Content = result ? message.Content = result ?
content + " successfully" : content + " successfully" :
"Failed"; content + " failed";
var webDriverService = _services.GetRequiredService<WebDriverService>(); var webDriverService = _services.GetRequiredService<WebDriverService>();
var path = webDriverService.GetScreenshotFilePath(message.MessageId); var path = webDriverService.GetScreenshotFilePath(message.MessageId);

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web"> <Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>$(TargetFramework)</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel> <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>$(TargetFramework)</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>$(TargetFramework)</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>