Files
BeWoPlaner/Shared/Core/AiUtils.cs

54 lines
1.3 KiB
C#

using BS.Shared.Exceptions;
using BS.Shared.Interface.Feature.AICore;
using System.Collections.Generic;
using System.Linq;
namespace BS.Shared.Core
{
public static class AiUtils
{
public static void CheckTokenSize(IEnumerable<IAiConversationMessage> messages, string modelName, int max_context_size)
{
CheckTokenSize(messages.Select(x => x.Message), modelName, max_context_size);
}
public static void CheckTokenSize(IEnumerable<string> messages, string modelName, int max_context_size)
{
var max_tokens_perc = 90.0d;
var buffer_tokens_fix = 500;
if (max_context_size < 0)
return;
var max_tokens = max_context_size;
var prev_tokens = CalculateTokensByModel(messages, modelName);
var calc_tokens = prev_tokens + buffer_tokens_fix;
var percentage = (double)calc_tokens * 100 / max_tokens;
if (percentage > max_tokens_perc)
{
var msg = $"Windowsize exceeded: ({prev_tokens}+{buffer_tokens_fix})/{max_tokens} ({percentage}%>{max_tokens_perc}%)";
throw new BeWoNotImplementedException(msg);
}
}
private static int CalculateTokensByModel(IEnumerable<string> messages, string modelName)
{
var count = 0;
foreach (var message in messages)
{
count += 4;
count += message.Length / 2;
}
return count;
}
}
}