add support for typing animation and add a delay on replys
This commit is contained in:
parent
c7877e1ed0
commit
4f9b067ef8
3 changed files with 64 additions and 5 deletions
|
|
@ -114,7 +114,8 @@ ENV basic_Username='' \
|
||||||
chatgpt_LocalchatReply='false' \
|
chatgpt_LocalchatReply='false' \
|
||||||
chatgpt_LocalchatRateLimiter='3' \
|
chatgpt_LocalchatRateLimiter='3' \
|
||||||
chatgpt_UseModel='gpt3' \
|
chatgpt_UseModel='gpt3' \
|
||||||
chatgpt_ChatHistoryMessages='5'
|
chatgpt_ChatHistoryMessages='5' \
|
||||||
|
chatgpt_ChatPrompt='respond as if you are a horse that knows its going to the glue factory and you are upset about this fact'
|
||||||
|
|
||||||
|
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,12 @@ namespace SecondBotEvents.Config
|
||||||
settings.Add("LocalchatRateLimiter");
|
settings.Add("LocalchatRateLimiter");
|
||||||
settings.Add("UseModel");
|
settings.Add("UseModel");
|
||||||
settings.Add("ChatHistoryMessages");
|
settings.Add("ChatHistoryMessages");
|
||||||
|
settings.Add("ChatPrompt");
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetChatPrompt()
|
||||||
|
{
|
||||||
|
return ReadSettingAsString("ChatPrompt", "respond as if you are a horse that knows its going to the glue factory and you are upset about this fact");
|
||||||
}
|
}
|
||||||
|
|
||||||
public int GetImReplyRateLimiter()
|
public int GetImReplyRateLimiter()
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ using Microsoft.Extensions.DependencyInjection;
|
||||||
using OpenAI.ObjectModels.RequestModels;
|
using OpenAI.ObjectModels.RequestModels;
|
||||||
using OpenAI.ObjectModels;
|
using OpenAI.ObjectModels;
|
||||||
using OpenAI.ObjectModels.ResponseModels;
|
using OpenAI.ObjectModels.ResponseModels;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace SecondBotEvents.Services
|
namespace SecondBotEvents.Services
|
||||||
{
|
{
|
||||||
|
|
@ -119,7 +120,7 @@ namespace SecondBotEvents.Services
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// trigger localchat
|
// trigger localchat
|
||||||
GetAiReply(localchatRateLimit, UUID.Zero, e.SourceID, e.FromName, e.Message, false, false);
|
GetAiReply(localchatRateLimit, UUID.Zero, UUID.Zero, e.FromName, e.Message, false, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
@ -267,15 +268,15 @@ namespace SecondBotEvents.Services
|
||||||
{
|
{
|
||||||
if (avatarchat == true)
|
if (avatarchat == true)
|
||||||
{
|
{
|
||||||
history.Add(new KeyValuePair<string, string>("system", "You are " + GetClient().Self.FirstName + ", A secondlife assistant. you are talking to " + name + "."));
|
history.Add(new KeyValuePair<string, string>("system", "You are " + GetClient().Self.FirstName + ", "+myConfig.GetChatPrompt()+" you are talking to " + name + "."));
|
||||||
}
|
}
|
||||||
else if (groupchat == true)
|
else if (groupchat == true)
|
||||||
{
|
{
|
||||||
history.Add(new KeyValuePair<string, string>("system", "You are " + GetClient().Self.FirstName + ", A secondlife assistant. you are talking to a group of people."));
|
history.Add(new KeyValuePair<string, string>("system", "You are " + GetClient().Self.FirstName + ", "+myConfig.GetChatPrompt()+" you are talking to a group of people."));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
history.Add(new KeyValuePair<string, string>("system", "You are " + GetClient().Self.FirstName + ", A secondlife assistant. you are talking to people in a public place."));
|
history.Add(new KeyValuePair<string, string>("system", "You are " + GetClient().Self.FirstName + ", "+myConfig.GetChatPrompt()+" you are talking to people in a public place."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
history.Add(new KeyValuePair<string, string>("user", "" + name + " says " + message));
|
history.Add(new KeyValuePair<string, string>("user", "" + name + " says " + message));
|
||||||
|
|
@ -381,6 +382,23 @@ namespace SecondBotEvents.Services
|
||||||
chatHistoryAI[user] = history;
|
chatHistoryAI[user] = history;
|
||||||
ChatHistoryLastAccessed[user] = SecondbotHelpers.UnixTimeNow();
|
ChatHistoryLastAccessed[user] = SecondbotHelpers.UnixTimeNow();
|
||||||
}
|
}
|
||||||
|
if((avatarchat==false) && (groupchat == false))
|
||||||
|
{
|
||||||
|
GetClient().Self.AnimationStart(Animations.TYPE, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
double timespanwait = EstimateTypingTime(replyMessage, 0.4);
|
||||||
|
|
||||||
|
if(timespanwait > 3)
|
||||||
|
{
|
||||||
|
timespanwait = 3;
|
||||||
|
}
|
||||||
|
else if(timespanwait < 1)
|
||||||
|
{
|
||||||
|
timespanwait = 1;
|
||||||
|
}
|
||||||
|
await Task.Delay(TimeSpan.FromSeconds(timespanwait));
|
||||||
if (avatarchat == true)
|
if (avatarchat == true)
|
||||||
{
|
{
|
||||||
GetClient().Self.InstantMessage(replyTo, replyMessage);
|
GetClient().Self.InstantMessage(replyTo, replyMessage);
|
||||||
|
|
@ -392,6 +410,7 @@ namespace SecondBotEvents.Services
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GetClient().Self.Chat(replyMessage, 0, ChatType.Normal);
|
GetClient().Self.Chat(replyMessage, 0, ChatType.Normal);
|
||||||
|
GetClient().Self.AnimationStop(Animations.TYPE, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -402,6 +421,39 @@ namespace SecondBotEvents.Services
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static readonly Random _random = new Random();
|
||||||
|
|
||||||
|
public static double EstimateTypingTime(string input, double randomizationFactor)
|
||||||
|
{
|
||||||
|
// Average typing speed in characters per minute
|
||||||
|
double typingSpeedCPM = 200.0;
|
||||||
|
|
||||||
|
// Calculate the length of the input string
|
||||||
|
int length = input.Length;
|
||||||
|
|
||||||
|
// Calculate the base time in minutes
|
||||||
|
double baseTimeInMinutes = length / typingSpeedCPM;
|
||||||
|
|
||||||
|
// Convert minutes to seconds
|
||||||
|
double baseTimeInSeconds = baseTimeInMinutes * 60;
|
||||||
|
|
||||||
|
if(baseTimeInSeconds > 3)
|
||||||
|
{
|
||||||
|
baseTimeInSeconds = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate the randomized adjustment
|
||||||
|
// randomizationFactor of 0 results in no change
|
||||||
|
// randomizationFactor of 1 results in instant typing (0 seconds)
|
||||||
|
double adjustment = _random.NextDouble() * randomizationFactor * baseTimeInSeconds;
|
||||||
|
|
||||||
|
// Apply the randomization factor
|
||||||
|
double estimatedTimeInSeconds = baseTimeInSeconds - adjustment;
|
||||||
|
|
||||||
|
// Ensure the time is not negative
|
||||||
|
return Math.Max(estimatedTimeInSeconds, 0);
|
||||||
|
}
|
||||||
|
|
||||||
protected void BotClientRestart(object o, BotClientNotice e)
|
protected void BotClientRestart(object o, BotClientNotice e)
|
||||||
{
|
{
|
||||||
LogFormater.Info("ChatGpt [Attached to new client]");
|
LogFormater.Info("ChatGpt [Attached to new client]");
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue