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>
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<LangVersion>10.0</LangVersion>
<BotSharpVersion>0.22.0</BotSharpVersion>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<GenerateDocumentationFile>false</GenerateDocumentationFile>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<LangVersion>10.0</LangVersion>
<BotSharpVersion>0.22.0</BotSharpVersion>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<GenerateDocumentationFile>false</GenerateDocumentationFile>
</PropertyGroup>
</Project>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -48,6 +48,12 @@ public partial class PlaywrightWebDriver
else if (count > 1)
{
_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;

View file

@ -22,9 +22,10 @@ public class ChangeCheckboxFn : IFunctionCallback
var agent = await agentService.LoadAgent(message.CurrentAgentId);
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 ?
$"{(args.UpdateValue == "check" ? "Checked" : "Unchecked")} checkbox of '{args.ElementText}' successfully" :
"Failed";
$"{content} successfully" :
$"{content} failed";
var webDriverService = _services.GetRequiredService<WebDriverService>();
var path = webDriverService.GetScreenshotFilePath(message.MessageId);

View file

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

View file

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

View file

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

View file

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

View file

@ -22,7 +22,7 @@ public class InputUserPasswordFn : IFunctionCallback
var agent = await agentService.LoadAgent(message.CurrentAgentId);
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 path = webDriverService.GetScreenshotFilePath(message.MessageId);

View file

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

View file

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

View file

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

View file

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