fix dialogflow v1 query post format bug.
This commit is contained in:
parent
fd8f6204e6
commit
66a0e9e60a
|
|
@ -34,10 +34,6 @@
|
|||
<DefineConstants>TRACE;MODEL_PER_CONTEXTS</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="Engines\Dialogflow\ApiAi.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="DotNetToolkit" Version="1.4.0" />
|
||||
<PackageReference Include="EntityFrameworkCore.BootKit" Version="1.6.3" />
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ namespace BotSharp.Core.Models
|
|||
public string Name { get; set; }
|
||||
|
||||
[JsonProperty("parameters")]
|
||||
public Dictionary<string, string> Parameters { get; set; }
|
||||
public Dictionary<string, object> Parameters { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Lifespan of the context measured in requests````
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using BotSharp.Core.Engines.Dialogflow.Http;
|
||||
using BotSharp.Core.Models;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
|
|
@ -47,7 +48,8 @@ namespace BotSharp.Core.Engines.Dialogflow
|
|||
|
||||
var jsonSettings = new JsonSerializerSettings
|
||||
{
|
||||
NullValueHandling = NullValueHandling.Ignore
|
||||
NullValueHandling = NullValueHandling.Ignore,
|
||||
ContractResolver = new CamelCasePropertyNamesContractResolver()
|
||||
};
|
||||
|
||||
var jsonRequest = JsonConvert.SerializeObject(request, Formatting.None, jsonSettings);
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ namespace BotSharp.Core.Models
|
|||
}
|
||||
}
|
||||
|
||||
public Dictionary<string, string> Parameters { get; set; }
|
||||
public Dictionary<string, object> Parameters { get; set; }
|
||||
|
||||
public AIContext[] Contexts { get; set; }
|
||||
|
||||
|
|
|
|||
|
|
@ -8,18 +8,15 @@ namespace BotSharp.Core.Engines.Dialogflow
|
|||
{
|
||||
public class ApiAi : ApiAiBase, IBotPlatform
|
||||
{
|
||||
private readonly AIConfiguration config;
|
||||
private readonly AIDataService dataService;
|
||||
|
||||
public ApiAi(AIConfiguration config)
|
||||
{
|
||||
this.config = config;
|
||||
|
||||
dataService = new AIDataService(this.config);
|
||||
}
|
||||
private AIDataService dataService;
|
||||
|
||||
public AIResponse TextRequest(string text)
|
||||
{
|
||||
if (dataService == null)
|
||||
{
|
||||
dataService = new AIDataService(AiConfig);
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(text))
|
||||
{
|
||||
throw new ArgumentNullException("text");
|
||||
|
|
@ -35,6 +32,11 @@ namespace BotSharp.Core.Engines.Dialogflow
|
|||
throw new ArgumentNullException("request");
|
||||
}
|
||||
|
||||
if(dataService == null)
|
||||
{
|
||||
dataService = new AIDataService(AiConfig);
|
||||
}
|
||||
|
||||
return dataService.Request(request);
|
||||
}
|
||||
|
||||
|
|
@ -45,17 +47,17 @@ namespace BotSharp.Core.Engines.Dialogflow
|
|||
throw new ArgumentNullException("text");
|
||||
}
|
||||
|
||||
if (dataService == null)
|
||||
{
|
||||
dataService = new AIDataService(AiConfig);
|
||||
}
|
||||
|
||||
return TextRequest(new AIRequest(text, requestExtras));
|
||||
}
|
||||
|
||||
public AIResponse VoiceRequest(Stream voiceStream, RequestExtras requestExtras = null)
|
||||
public void Train()
|
||||
{
|
||||
if (config.Language == SupportedLanguage.Italian)
|
||||
{
|
||||
throw new AIServiceException("Sorry, but Italian language now is not supported in Speaktoit recognition. Please use some another speech recognition engine.");
|
||||
}
|
||||
|
||||
return dataService.VoiceRequest(voiceStream, requestExtras);
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ using System.Text;
|
|||
|
||||
namespace BotSharp.Core.Engines.Dialogflow
|
||||
{
|
||||
public class ApiAiBase
|
||||
public class ApiAiBase : BotEngineBase
|
||||
{
|
||||
protected float[] TrimSilence(float[] samples)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ namespace BotSharp.Core.Engines
|
|||
Source = "agent",
|
||||
ResolvedQuery = request.Query.First(),
|
||||
Action = intentResponse?.Action,
|
||||
Parameters = intentResponse?.Parameters?.ToDictionary(x => x.Name, x => x.Value),
|
||||
Parameters = intentResponse?.Parameters?.ToDictionary(x => x.Name, x => (object)x.Value),
|
||||
Score = response.Intent.Confidence,
|
||||
Metadata = new AIResponseMetadata { IntentId = intentResponse?.IntentId, IntentName = intentResponse?.IntentName },
|
||||
Fulfillment = new AIResponseFulfillment
|
||||
|
|
@ -132,7 +132,7 @@ namespace BotSharp.Core.Engines
|
|||
var data = new RasaTrainingData
|
||||
{
|
||||
Entities = entity_synonyms.Select(x => x.ToObject<RasaTraningEntity>()).ToList(),
|
||||
UserSays = common_examples.Select(x => x.Intent.ToObject<RasaIntentExpression>()).ToList()
|
||||
UserSays = common_examples.Select(x => x.ToObject<RasaIntentExpression>()).ToList()
|
||||
};
|
||||
|
||||
// meet minimal requirement
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using BotSharp.Core.Engines;
|
||||
using BotSharp.Core.Adapters.Rasa;
|
||||
using BotSharp.Core.Engines;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
@ -6,7 +7,7 @@ using System.Text;
|
|||
|
||||
namespace BotSharp.Core.Models
|
||||
{
|
||||
public class RasaIntentExpression : TrainingIntentExpression<RasaIntentExpressionPart>
|
||||
public class RasaIntentExpression : TrainingIntentExpression<TrainingIntentExpressionPart>
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using BotSharp.Core.Agents;
|
||||
using BotSharp.Core.Engines;
|
||||
using BotSharp.Core.Engines.Dialogflow;
|
||||
using BotSharp.Core.Models;
|
||||
using BotSharp.RestApi.Integrations.FacebookMessenger;
|
||||
using DotNetToolkit;
|
||||
|
|
@ -77,11 +78,11 @@ namespace BotSharp.RestApi.Integrations
|
|||
{
|
||||
Console.WriteLine($"OnTextMessaged: {message.Message.Text}");
|
||||
|
||||
var rasa = new RasaAi();
|
||||
var agent = rasa.LoadAgent(agentId);
|
||||
rasa.AiConfig = new AIConfiguration(agent.ClientAccessToken, SupportedLanguage.English) { AgentId = agentId };
|
||||
rasa.AiConfig.SessionId = message.Sender.Id;
|
||||
var aiResponse = rasa.TextRequest(new AIRequest { Query = new String[] { message.Message.Text } });
|
||||
var ai = new ApiAi();
|
||||
var agent = ai.LoadAgent(agentId);
|
||||
ai.AiConfig = new AIConfiguration(agent.ClientAccessToken, SupportedLanguage.English) { AgentId = agentId };
|
||||
ai.AiConfig.SessionId = message.Sender.Id;
|
||||
var aiResponse = ai.TextRequest(new AIRequest { Query = new String[] { message.Message.Text } });
|
||||
|
||||
var dc = new DefaultDataContextLoader().GetDefaultDc();
|
||||
var config = dc.Table<AgentIntegration>().FirstOrDefault(x => x.AgentId == agentId && x.Platform == "Facebook Messenger");
|
||||
|
|
@ -91,7 +92,7 @@ namespace BotSharp.RestApi.Integrations
|
|||
Recipient = message.Sender.ToObject<WebhookMessageRecipient>(),
|
||||
Message = new WebhookTextMessage
|
||||
{
|
||||
Text = aiResponse.Result.Fulfillment.Speech
|
||||
Text = String.IsNullOrEmpty(aiResponse.Result.Fulfillment.Speech) ? aiResponse.Result.Action : aiResponse.Result.Fulfillment.Speech
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,11 +57,8 @@ namespace BotSharp.UnitTest
|
|||
[TestMethod]
|
||||
public void TrainAgentTest()
|
||||
{
|
||||
var config = new AIConfiguration("", SupportedLanguage.English) { AgentId = BOT_ID };
|
||||
config.SessionId = Guid.NewGuid().ToString();
|
||||
|
||||
var rasa = new RasaAi();
|
||||
|
||||
rasa.LoadAgent(BOT_ID);
|
||||
rasa.Train();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using BotSharp.Core.Engines;
|
||||
using BotSharp.Core.Engines.Dialogflow;
|
||||
using BotSharp.Core.Models;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using System;
|
||||
|
|
@ -14,32 +15,32 @@ namespace BotSharp.UnitTest
|
|||
[TestMethod]
|
||||
public void TextRequest()
|
||||
{
|
||||
var rasa = new RasaAi();
|
||||
var agent = rasa.LoadAgent(BOT_ID);
|
||||
rasa.AiConfig = new AIConfiguration(agent.ClientAccessToken, SupportedLanguage.English) { AgentId = BOT_ID };
|
||||
rasa.AiConfig.SessionId = Guid.NewGuid().ToString();
|
||||
var ai = new ApiAi();
|
||||
var agent = ai.LoadAgent(BOT_ID);
|
||||
ai.AiConfig = new AIConfiguration(agent.ClientAccessToken, SupportedLanguage.English) { AgentId = BOT_ID };
|
||||
ai.AiConfig.SessionId = Guid.NewGuid().ToString();
|
||||
|
||||
// Round 1
|
||||
var response = rasa.TextRequest(new AIRequest { Query = new String[] { "Can you play country music?" } });
|
||||
var response = ai.TextRequest(new AIRequest { Query = new String[] { "Can you play country music?" } });
|
||||
Assert.AreEqual(response.Result.Metadata.IntentName, "music.play");
|
||||
Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "music-player-control").Lifespan, 3);
|
||||
Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "play-music").Lifespan, 5);
|
||||
Assert.AreEqual(response.Result.Parameters.First(x => x.Key == "genre").Value, "country");
|
||||
|
||||
// Round 2
|
||||
response = rasa.TextRequest(new AIRequest { Query = new String[] { "pause it" } });
|
||||
response = ai.TextRequest(new AIRequest { Query = new String[] { "pause it" } });
|
||||
Assert.AreEqual(response.Result.Metadata.IntentName, "music_player_control.pause");
|
||||
Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "music-player-control").Lifespan, 3);
|
||||
Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "play-music").Lifespan, 4);
|
||||
|
||||
// Round 3
|
||||
response = rasa.TextRequest(new AIRequest { Query = new String[] { "continue" } });
|
||||
response = ai.TextRequest(new AIRequest { Query = new String[] { "continue" } });
|
||||
Assert.AreEqual(response.Result.Metadata.IntentName, "music_player_control.resume");
|
||||
Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "music-player-control").Lifespan, 3);
|
||||
Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "play-music").Lifespan, 3);
|
||||
|
||||
// Round 4
|
||||
response = rasa.TextRequest(new AIRequest { Query = new String[] { "play Hard Times by David Newman" } });
|
||||
response = ai.TextRequest(new AIRequest { Query = new String[] { "play Hard Times by David Newman" } });
|
||||
Assert.AreEqual(response.Result.Metadata.IntentName, "music.play");
|
||||
Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "music-player-control").Lifespan, 3);
|
||||
Assert.AreEqual(response.Result.Contexts.First(x => x.Name == "play-music").Lifespan, 5);
|
||||
|
|
|
|||
Loading…
Reference in a new issue