Нормализовать переводы строк в LF
Решение по TD-STYLE-ANALYZERS: LF — инструменты проекта (Python/Node) пишут LF, CRLF-.sh не работают на Linux CI (sh scripts/ci.sh), большинство файлов уже были LF. Добавлен .gitattributes (* text=auto eol=lf, бинарные исключения), .editorconfig переведён на lf, 1029 файлов конвертированы, git add --renormalize. Из индекса убраны закравшиеся archive/**/__pycache__/*.pyc.
This commit is contained in:
@@ -1,64 +1,64 @@
|
||||
using Deal.Ai.Llm;
|
||||
|
||||
namespace Deal.Ai.Tests.Ai;
|
||||
|
||||
/// <summary>
|
||||
/// Unit-тесты оценки токенов
|
||||
/// </summary>
|
||||
public sealed class TokenEstimatorTests
|
||||
{
|
||||
/// <summary>
|
||||
/// Usage провайдера проходит без изменений, включая total ≠ сумме
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void Resolve_WithProviderUsage_PassesThrough()
|
||||
{
|
||||
var provider = new ProviderUsage(PromptTokens: 11, CompletionTokens: 5, TotalTokens: 16);
|
||||
|
||||
LlmUsage usage = TokenEstimator.Resolve(provider, "system", "text");
|
||||
|
||||
Assert.Equal(11, usage.PromptTokens);
|
||||
Assert.Equal(5, usage.CompletionTokens);
|
||||
Assert.Equal(16, usage.TotalTokens);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Нет usage провайдера — оценка по символам
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void Resolve_WithoutProviderUsage_EstimatesByChars()
|
||||
{
|
||||
// prompt-текст = 8 символов → 2 токена; completion-текст = 13 символов → ceil(13/4) = 4.
|
||||
LlmUsage usage = TokenEstimator.Resolve(null, "12345678", """{"pass": true}""");
|
||||
|
||||
Assert.Equal(2, usage.PromptTokens);
|
||||
Assert.Equal(4, usage.CompletionTokens);
|
||||
Assert.Equal(6, usage.TotalTokens);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Округление вверх
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void Resolve_WithoutProviderUsage_RoundsUp()
|
||||
{
|
||||
LlmUsage fourChars = TokenEstimator.Resolve(null, "abcd", string.Empty);
|
||||
LlmUsage fiveChars = TokenEstimator.Resolve(null, "abcde", string.Empty);
|
||||
|
||||
Assert.Equal(1, fourChars.PromptTokens);
|
||||
Assert.Equal(2, fiveChars.PromptTokens);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Пустые тексты дают нулевую оценку
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void Resolve_EmptyTexts_ReturnsZeroTokens()
|
||||
{
|
||||
LlmUsage usage = TokenEstimator.Resolve(null, string.Empty, string.Empty);
|
||||
|
||||
Assert.Equal(0, usage.PromptTokens);
|
||||
Assert.Equal(0, usage.CompletionTokens);
|
||||
Assert.Equal(0, usage.TotalTokens);
|
||||
}
|
||||
}
|
||||
using Deal.Ai.Llm;
|
||||
|
||||
namespace Deal.Ai.Tests.Ai;
|
||||
|
||||
/// <summary>
|
||||
/// Unit-тесты оценки токенов
|
||||
/// </summary>
|
||||
public sealed class TokenEstimatorTests
|
||||
{
|
||||
/// <summary>
|
||||
/// Usage провайдера проходит без изменений, включая total ≠ сумме
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void Resolve_WithProviderUsage_PassesThrough()
|
||||
{
|
||||
var provider = new ProviderUsage(PromptTokens: 11, CompletionTokens: 5, TotalTokens: 16);
|
||||
|
||||
LlmUsage usage = TokenEstimator.Resolve(provider, "system", "text");
|
||||
|
||||
Assert.Equal(11, usage.PromptTokens);
|
||||
Assert.Equal(5, usage.CompletionTokens);
|
||||
Assert.Equal(16, usage.TotalTokens);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Нет usage провайдера — оценка по символам
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void Resolve_WithoutProviderUsage_EstimatesByChars()
|
||||
{
|
||||
// prompt-текст = 8 символов → 2 токена; completion-текст = 13 символов → ceil(13/4) = 4.
|
||||
LlmUsage usage = TokenEstimator.Resolve(null, "12345678", """{"pass": true}""");
|
||||
|
||||
Assert.Equal(2, usage.PromptTokens);
|
||||
Assert.Equal(4, usage.CompletionTokens);
|
||||
Assert.Equal(6, usage.TotalTokens);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Округление вверх
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void Resolve_WithoutProviderUsage_RoundsUp()
|
||||
{
|
||||
LlmUsage fourChars = TokenEstimator.Resolve(null, "abcd", string.Empty);
|
||||
LlmUsage fiveChars = TokenEstimator.Resolve(null, "abcde", string.Empty);
|
||||
|
||||
Assert.Equal(1, fourChars.PromptTokens);
|
||||
Assert.Equal(2, fiveChars.PromptTokens);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Пустые тексты дают нулевую оценку
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void Resolve_EmptyTexts_ReturnsZeroTokens()
|
||||
{
|
||||
LlmUsage usage = TokenEstimator.Resolve(null, string.Empty, string.Empty);
|
||||
|
||||
Assert.Equal(0, usage.PromptTokens);
|
||||
Assert.Equal(0, usage.CompletionTokens);
|
||||
Assert.Equal(0, usage.TotalTokens);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user