Token Berechnung Update
This commit is contained in:
@@ -21,6 +21,7 @@ using BS.Shared.Interface;
|
||||
using System.Text.Json;
|
||||
using BS.Shared.Core;
|
||||
using BeWo.Data.Security;
|
||||
using BS.Shared.Exceptions;
|
||||
|
||||
namespace BeWo.Service.Plugins
|
||||
{
|
||||
@@ -85,7 +86,10 @@ namespace BeWo.Service.Plugins
|
||||
|
||||
if(model.Value > -1)
|
||||
{
|
||||
AiUtils.CheckTokenSize(messages, model.ModelName, model.Value);
|
||||
if(!AiUtils.CheckUserAllMessageContextSize(messages, model.ModelName, model.Value, out var error))
|
||||
{
|
||||
throw new BeWoNotImplementedException(error);
|
||||
}
|
||||
}
|
||||
|
||||
var payload = new
|
||||
|
||||
@@ -231,7 +231,7 @@ namespace BeWo.Service.Plugins
|
||||
|
||||
var conversation = createAiConversation(aiContextType, context, modell_oid.Value, AiDataContextType.csv2);
|
||||
|
||||
return AiUtils.CheckSystemMessageContextSize(conversation.Messages.Select(x => x.Message), modell.ModelName, modell.Value);
|
||||
return AiUtils.CheckSystemMessageContextSize(conversation.Messages.Select(x => x.Message), modell.ModelName, modell.Value, out var error);
|
||||
}
|
||||
|
||||
// ======================[ private ]======================
|
||||
@@ -349,6 +349,14 @@ namespace BeWo.Service.Plugins
|
||||
// Check Token Size
|
||||
if (-1 < configModel.Value)
|
||||
{
|
||||
if(conv.Messages.Count <= 2)
|
||||
{
|
||||
if(!AiUtils.CheckUserFirstMessageContextSize(conv.Messages.Select(x => x.Message), configModelName, configModel.Value, out var error))
|
||||
{
|
||||
throw new BeWoNotImplementedException(error);
|
||||
}
|
||||
}
|
||||
|
||||
AiUtils.CheckTokenSize(conv.Messages, configModelName, configModel.Value);
|
||||
}
|
||||
|
||||
|
||||
@@ -41,38 +41,25 @@ namespace BS.Shared.Core
|
||||
}
|
||||
}
|
||||
|
||||
public static bool CheckSystemMessageContextSize(IEnumerable<string> messages, string modelName, int max_context_size)
|
||||
public static bool CheckSystemMessageContextSize(IEnumerable<string> messages, string modelName, int max_context_size, out string error)
|
||||
{
|
||||
if (max_context_size < 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(max_context_size));
|
||||
|
||||
if (max_context_size == 0)
|
||||
return false;
|
||||
|
||||
var tokens_count = CalculateTokensByModel(messages, modelName);
|
||||
|
||||
var percentage = (double)tokens_count * 100 / max_context_size;
|
||||
|
||||
return percentage <= MAX_TOKENS_SYSTEM_PERCENTAGE;
|
||||
return CheckContextSize(messages, modelName, max_context_size, MAX_TOKENS_SYSTEM_PERCENTAGE, out error);
|
||||
}
|
||||
|
||||
public static bool CheckUserFirstMessageContextSize(IEnumerable<string> messages, string modelName, int max_context_size)
|
||||
public static bool CheckUserFirstMessageContextSize(IEnumerable<string> messages, string modelName, int max_context_size, out string error)
|
||||
{
|
||||
if (max_context_size < 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(max_context_size));
|
||||
|
||||
if (max_context_size == 0)
|
||||
return false;
|
||||
|
||||
var tokens_count = CalculateTokensByModel(messages, modelName);
|
||||
|
||||
var percentage = (double)tokens_count * 100 / max_context_size;
|
||||
|
||||
return percentage <= MAX_TOKENS_SYSTEM_PERCENTAGE + MAX_TOKENS_USER_PERCENTAGE;
|
||||
return CheckContextSize(messages, modelName, max_context_size, MAX_TOKENS_SYSTEM_PERCENTAGE + MAX_TOKENS_USER_PERCENTAGE, out error);
|
||||
}
|
||||
|
||||
public static bool CheckUserAllMessageContextSize(IEnumerable<string> messages, string modelName, int max_context_size)
|
||||
public static bool CheckUserAllMessageContextSize(IEnumerable<string> messages, string modelName, int max_context_size, out string error)
|
||||
{
|
||||
return CheckContextSize(messages, modelName, max_context_size, MAX_TOKENS_CONVERSATION_PERCENTAGE, out error);
|
||||
}
|
||||
|
||||
private static bool CheckContextSize(IEnumerable<string> messages, string modelName, int max_context_size, double maximum, out string error)
|
||||
{
|
||||
error = null;
|
||||
|
||||
if (max_context_size < 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(max_context_size));
|
||||
|
||||
@@ -83,7 +70,14 @@ namespace BS.Shared.Core
|
||||
|
||||
var percentage = (double)tokens_count * 100 / max_context_size;
|
||||
|
||||
return percentage <= MAX_TOKENS_CONVERSATION_PERCENTAGE;
|
||||
var success = percentage <= maximum;
|
||||
|
||||
if (!success)
|
||||
{
|
||||
error = $"Windowsize exceeded: {tokens_count}/{max_context_size} ({percentage}%>{maximum}%)";
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
private static int CalculateTokensByModel(IEnumerable<string> messages, string modelName)
|
||||
|
||||
Reference in New Issue
Block a user