мини рефакторинг

добавлены пачноты
This commit is contained in:
2026-07-24 14:07:34 +04:00
parent eb8dac7627
commit ae1d7a12b8
9 changed files with 31 additions and 408 deletions

View File

@@ -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)));
}
}
}