/// <summary> /// Runs interactive command line chat between user and bot. Runs indefinately until EOF is entered to the prompt. /// </summary> /// <param name="context">Chat context</param> /// <param name="maxSteps">Max number of steps. Set to { } if omitted</param> public void Interactive(WitContext context = null, int maxSteps = 5) { if (actions == null) { ThrowMustHaveActions(); } if (maxSteps <= 0) { throw new WitException("max iterations reached"); } if (context == null) { context = new WitContext(); } string message; while (true) { try { message = Console.ReadLine(); } catch (Exception) { return; } var response = RunActions("session-id-01", message, context, maxSteps); context = response.Context; response.Messages.ForEach(msg => Console.WriteLine(msg)); } }
public void Is_Case_Insensitive() { //Arrange var witContext = new WitContext(); witContext["teSt"] = "testData"; //Action //Assert if (witContext.TryGetValue("TEsT", out object val)) { Assert.AreEqual(val, "testData"); } else { Assert.Fail("WitContext should not be case sensitive"); } }
/// <summary> /// Returns what your bot should do next. The next step can be either answering to the user, performing an action, or waiting for further requests. /// </summary> /// <param name="sessionId">A specific ID of your choosing representing the session your query belongs to</param> /// <param name="message">A message from the user</param> /// <param name="context">Chat context</param> /// <param name="verbose">Calls the API in verbose mode</param> /// <returns <see cref="ConverseResponse"/>>Converse response</returns> public ConverseResponse Converse(string sessionId, string message, WitContext context, bool verbose = true) { if (context == null) { context = new WitContext(); } var request = new RestRequest("converse", Method.POST); request.AddJsonBody(context); if (message != null) { request.AddQueryParameter("q", message); } request.AddQueryParameter("session_id", sessionId); IRestResponse responseObject = client.Execute(request); ConverseResponse response = JsonConvert.DeserializeObject <ConverseResponse>(responseObject.Content); return(response); }
/// <summary> /// A higher-level method to the Wit converse API /// </summary> /// <param name="sessionId">A specific ID of your choosing representing the session your query belongs to</param> /// <param name="message">A message from the user.</param> /// <param name="context">Chat context</param> /// <param name="maxSteps">Max number of steps</param> /// <param name="verbose">Calls the API in verbose mode</param> /// <returns <see cref="BotResponse"/>>The bot response</returns> public BotResponse RunActions(string sessionId, string message, WitContext context, int maxSteps = 5, bool verbose = true) { var botResponse = new BotResponse(context); if (actions == null) { ThrowMustHaveActions(); } if (context == null) { context = new WitContext(); botResponse.Context = context; } /** Figuring out whether we need to reset the last turn. * Each new call increments an index for the session. * We only care about the last call to run_actions. * All the previous ones are discarded (preemptive exit).*/ var currentRequest = 1; if (sessions.ContainsKey(sessionId)) { currentRequest = sessions[sessionId] + 1; } sessions[sessionId] = currentRequest; botResponse = _RunActions(sessionId, currentRequest, message, botResponse, maxSteps, verbose); // Cleaning up once the last call to RunActions finishes. if (currentRequest == sessions[sessionId]) { sessions.Remove(sessionId); } return(botResponse); }
/// <summary> /// Runs interactive command line chat between user and bot. Runs indefinately until EOF is entered to the prompt. /// </summary> /// <param name="context">Chat context</param> /// <param name="maxSteps">Max number of steps. Set to { } if omitted</param> public void Interactive(WitContext context = null, int maxSteps = 5) { if (this.actions == null) { ThrowMustHaveActions(); } if (maxSteps <= 0) { throw new WitException("max iterations reached"); } if (context == null) { context = new WitContext(); } string message; while (true) { string session; try { session = SessionId.Generate(); Console.Write("{0} YOU > ", session); message = Console.ReadLine(); } catch (Exception) { return; } var response = this.RunActions(session, message, context, maxSteps); context = response.Context; response.Messages.ForEach(msg => Console.WriteLine("{0} HENRY > {1}\n", session, msg)); } }
public BotResponse(WitContext context) { this.Context = context; this.Messages = new List <string>(); }
public ConverseRequest(string sessionId, string message, WitContext context) { this.SessionId = sessionId; this.Message = message; this.Context = context; }
public ConverseRequest(string sessionId, string message, WitContext context) { SessionId = sessionId; Message = message; Context = context; }