articulate integration in progress.

This commit is contained in:
Oceania2018 2018-09-30 10:11:36 -05:00
parent a06745ffb0
commit 5fc98cc327
13 changed files with 162 additions and 61 deletions

View file

@ -25,13 +25,6 @@ namespace BotSharp.Platform.Abstraction
/// <returns></returns>
StandardAgent StandardizeAgent(TAgent agent);
/// <summary>
/// Recover standard agent to specific agent format
/// </summary>
/// <param name="agent"></param>
/// <returns></returns>
TAgent RecoverAgent(StandardAgent agent);
/// <summary>
///
/// </summary>

View file

@ -1,10 +1,16 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace BotSharp.Platform.Models
{
public abstract class EntityBase
{
/// <summary>
/// Guid
/// </summary>
[StringLength(36)]
public String Id { get; set; }
}
}

View file

@ -4,6 +4,7 @@ using BotSharp.Platform.Models;
using Platform.Articulate.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Platform.Articulate
@ -20,19 +21,40 @@ namespace Platform.Articulate
{
public DialogRequestOptions RequestOptions { get; set; }
public TAgent RecoverAgent(StandardAgent agent)
public Tuple<TAgent, DomainModel> GetAgentByDomainId(String domainId)
{
if (agent == null) return default(TAgent);
var results = GetAllAgents();
var agent1 = new AgentModel
foreach (TAgent agent in results)
{
Id = agent.Id,
Name = agent.Name,
Description = agent.Description,
Language = agent.Language
};
var domain = (agent as AgentModel).Domains.FirstOrDefault(x => x.Id == domainId);
return (TAgent)(agent1 as Object);
if (domain != null)
{
return new Tuple<TAgent, DomainModel>(agent, domain);
}
}
return null;
}
public Tuple<TAgent, DomainModel, IntentModel> GetAgentByIntentId(String intentId)
{
var results = GetAllAgents();
foreach (TAgent agent in results)
{
foreach (DomainModel domain in (agent as AgentModel).Domains)
{
var intent = domain.Intents.FirstOrDefault(x => x.Id == intentId);
if (intent != null)
{
return new Tuple<TAgent, DomainModel, IntentModel>(agent, domain, intent);
}
}
}
return null;
}
public StandardAgent StandardizeAgent(TAgent specificAgent)

View file

@ -61,9 +61,8 @@ namespace Platform.Articulate.Controllers
public DomainPageViewModel GetAgentDomains([FromRoute] string agentId, [FromQuery] int start, [FromQuery] int limit)
{
var agent = builder.GetAgentById(agentId);
return new DomainPageViewModel { /*Domains = agent.d, Total = domains.Count*/ };
return new DomainPageViewModel { Domains = agent.Domains, Total = agent.Domains.Count };
}
}
#endif

View file

@ -40,9 +40,8 @@ namespace Platform.Articulate.Controllers
[HttpGet("/agent/{agentId}/entity")]
public EntityPageViewModel GetAgentEntities([FromRoute] string agentId, [FromQuery] int start, [FromQuery] int limit)
{
var entities = new List<EntityModel>();
return new EntityPageViewModel { Entities = entities, Total = entities.Count };
var agent = builder.GetAgentById(agentId);
return new EntityPageViewModel { Entities = agent.Entities.Select(x => x as EntityModel).ToList(), Total = agent.Entities.Count };
}
[HttpPost]
@ -57,7 +56,7 @@ namespace Platform.Articulate.Controllers
}
var agent = builder.GetAgentByName(entity.Agent);
entity.Id = Guid.NewGuid().ToString();
agent.Entities.Add(entity);
builder.SaveAgent(agent);

View file

@ -26,15 +26,9 @@ namespace Platform.Articulate.Controllers
[HttpGet("{intentId}")]
public IntentModel GetIntent([FromRoute] string intentId)
{
string dataDir = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Articulate");
var agent = builder.GetAgentByIntentId(intentId);
string dataPath = Directory.GetFiles(dataDir).FirstOrDefault(x => x.EndsWith($"-intent-{intentId}.json"));
string json = System.IO.File.ReadAllText(dataPath);
var intent = JsonConvert.DeserializeObject<IntentModel>(json);
return intent;
return agent.Item3;
}
[HttpPost]
@ -56,20 +50,6 @@ namespace Platform.Articulate.Controllers
return intent;
}
[HttpGet("{intentId}/scenario")]
public IntentScenarioViewModel GetIntentScenario([FromRoute] string intentId)
{
string dataDir = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Articulate");
string dataPath = Directory.GetFiles(dataDir).FirstOrDefault(x => x.Contains($"-intent-{intentId}-scenario-"));
string json = System.IO.File.ReadAllText(dataPath);
var scenario = JsonConvert.DeserializeObject<IntentScenarioViewModel>(json);
return scenario;
}
[HttpGet("{intentId}/webhook")]
public void GetIntentWebhook([FromRoute] string intentId)
{
@ -137,10 +117,8 @@ namespace Platform.Articulate.Controllers
[HttpGet("/domain/{domainId}/intent")]
public IntentPageViewModel GetReferencedIntentsByDomain([FromRoute] string domainId, [FromQuery] int start, [FromQuery] int limit)
{
var intents = new List<IntentModel>();
var results = builder.GetAllAgents();
//var agents = results.Select(x => builder.RecoverAgent(x) as AgentModel).Where(x => x.).ToList();
var agent = builder.GetAgentByDomainId(domainId);
var intents = agent.Item2.Intents.Select(x => x as IntentModel).ToList();
return new IntentPageViewModel { Intents = intents, Total = intents.Count };
}

View file

@ -0,0 +1,19 @@
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Text;
namespace Platform.Articulate.Controllers
{
#if ARTICULATE
[Route("[controller]")]
public class ParseControllercs : ControllerBase
{
[HttpGet("/agent/{agentId}/parse")]
public void ParseText([FromRoute] string agentId, [FromQuery] string text)
{
}
}
#endif
}

View file

@ -0,0 +1,67 @@
using BotSharp.Core;
using DotNetToolkit;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Platform.Articulate.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace Platform.Articulate.Controllers
{
#if ARTICULATE
[Route("[controller]")]
public class ScenarioController : ControllerBase
{
private ArticulateAi<AgentStorageInMemory<AgentModel>, AgentModel> builder;
public ScenarioController()
{
builder = new ArticulateAi<AgentStorageInMemory<AgentModel>, AgentModel>();
}
[HttpGet("/intent/{intentId}/scenario")]
public IntentScenarioViewModel GetIntentScenario([FromRoute] string intentId)
{
var agent = builder.GetAgentByIntentId(intentId);
var view = agent.Item3.Scenario.ToObject<IntentScenarioViewModel>();
view.Agent = agent.Item1.AgentName;
view.Domain = agent.Item2.DomainName;
view.Intent = agent.Item3.IntentName;
return view;
}
[HttpPost("/intent/{intentId}/scenario")]
public IntentScenarioViewModel PostIntentScenario()
{
IntentScenarioViewModel scenario = null;
using (var reader = new StreamReader(Request.Body))
{
string body = reader.ReadToEnd();
scenario = JsonConvert.DeserializeObject<IntentScenarioViewModel>(body);
}
scenario.Id = Guid.NewGuid().ToString();
var agent = builder.GetAgentByName(scenario.Agent);
var model = scenario.ToObject<ScenarioModel>();
agent.Domains.First(x => x.DomainName == scenario.Domain)
.Intents
.First(x => x.IntentName == scenario.Intent)
.Scenario = model;
builder.SaveAgent(agent);
return scenario;
}
}
#endif
}

View file

@ -7,6 +7,11 @@ namespace Platform.Articulate.Models
{
public class DomainModel
{
public DomainModel()
{
Intents = new List<IntentModel>();
}
public string Id { get; set; }
public string Agent { get; set; }
@ -21,6 +26,6 @@ namespace Platform.Articulate.Models
public string Status { get; set; }
public List<IntentBase> Intents { get; set; }
public List<IntentModel> Intents { get; set; }
}
}

View file

@ -8,8 +8,6 @@ namespace Platform.Articulate.Models
{
public class EntityModel : EntityBase
{
public int Id { get; set; }
public string Regex { get; set; }
public string Agent { get; set; }

View file

@ -8,8 +8,7 @@ namespace Platform.Articulate.Models
{
public class IntentModel : IntentBase
{
[JsonProperty("IntentName")]
public new string Name { get; set; }
public string IntentName { get; set; }
public string Agent { get; set; }
@ -21,6 +20,6 @@ namespace Platform.Articulate.Models
public List<IntentExampleModel> Examples { get; set; }
public IntentResponseBase Response { get; set; }
public ScenarioModel Scenario { get; set; }
}
}

View file

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace Platform.Articulate.Models
{
public class ScenarioModel
{
/// <summary>
/// Guid
/// </summary>
[StringLength(36)]
public String Id { get; set; }
public string ScenarioName { get; set; }
public List<String> IntentResponses { get; set; }
public List<SlotModel> Slots { get; set; }
}
}

View file

@ -4,18 +4,12 @@ using System.Text;
namespace Platform.Articulate.Models
{
public class IntentScenarioViewModel
public class IntentScenarioViewModel : ScenarioModel
{
public string Domain { get; set; }
public string Agent { get; set; }
public string Intent { get; set; }
public string ScenarioName { get; set; }
public List<String> IntentResponses { get; set; }
public List<SlotModel> Slots { get; set; }
}
}