using BuildFlow.Domain.Interfaces;
namespace BuildFlow.Rag.Tests.Stub;
///
/// Stub IEmbeddingService:返回固定维度(768)的向量,与 DB vector(768) 列匹配。
/// 维度由 embeddinggemma-300m 决定。所有文本返回相同向量(测试场景下足够)。
///
public sealed class StubEmbeddingService : IEmbeddingService
{
/// 向量维度,匹配 document_chunks.embedding vector(768)。
public const int Dimensions = 768;
/// 是否返回空向量(用于测试零分块路径)。
public bool ReturnEmpty { get; init; }
private static float[] BuildVector()
{
var v = new float[Dimensions];
for (var i = 0; i < Dimensions; i++)
v[i] = (i % 10) / 10f;
return v;
}
public Task EmbedAsync(string text, CancellationToken ct = default)
=> Task.FromResult(ReturnEmpty ? [] : BuildVector());
public Task> EmbedBatchAsync(List texts, CancellationToken ct = default)
{
if (ReturnEmpty)
return Task.FromResult(new List());
var vector = BuildVector();
return Task.FromResult(texts.Select(_ => vector).ToList());
}
}