мини рефакторинг
добавлены пачноты
This commit is contained in:
@@ -3,27 +3,10 @@ using CodeBase.Repositories;
|
||||
|
||||
namespace CodeBase.Services
|
||||
{
|
||||
public class CodeService(ChunkService service,
|
||||
ScipRepository repository,
|
||||
public class CodeService(ScipRepository repository,
|
||||
VectorizationService vectorizationService,
|
||||
LlmService llmService)
|
||||
{
|
||||
public async Task<List<CodeChunk>> GetCodeChunksAsync(string path, string name)
|
||||
{
|
||||
if (!Path.Exists(path))
|
||||
{
|
||||
throw new Exception("Путь не найден");
|
||||
}
|
||||
|
||||
var allChunks = await service.ParseProjectAsync(path);
|
||||
|
||||
var chunks = await vectorizationService.EnrichChunksWithVectorsAsync(allChunks);
|
||||
|
||||
//await repository.SaveChunksAsync(name, chunks);
|
||||
|
||||
return chunks;
|
||||
}
|
||||
|
||||
public async Task<string> GetAnswerAsync(string name, string question)
|
||||
{
|
||||
var query = await vectorizationService.GetVectorAsync(question);
|
||||
@@ -45,29 +28,5 @@ namespace CodeBase.Services
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
// Математика косинусного сходства
|
||||
private float CalculateCosineSimilarity(float[] vectorA, float[] vectorB)
|
||||
{
|
||||
if (vectorA.Length != vectorB.Length)
|
||||
throw new ArgumentException("Векторы должны быть одинаковой длины (например, 768).");
|
||||
|
||||
float dotProduct = 0;
|
||||
float magnitudeA = 0;
|
||||
float magnitudeB = 0;
|
||||
|
||||
for (int i = 0; i < vectorA.Length; i++)
|
||||
{
|
||||
dotProduct += vectorA[i] * vectorB[i];
|
||||
magnitudeA += vectorA[i] * vectorA[i];
|
||||
magnitudeB += vectorB[i] * vectorB[i];
|
||||
}
|
||||
|
||||
// Защита от деления на ноль
|
||||
if (magnitudeA == 0 || magnitudeB == 0)
|
||||
return 0;
|
||||
|
||||
return (float)(dotProduct / (Math.Sqrt(magnitudeA) * Math.Sqrt(magnitudeB)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user