feat: add support for auto resolving compilation errors (#318)

This commit is contained in:
Carl-Robert 2023-12-29 16:41:47 +02:00 committed by GitHub
parent 7031a6dc73
commit f831a1facd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
51 changed files with 919 additions and 595 deletions

View file

@ -64,16 +64,16 @@ public class EmbeddingsService {
}
public List<Item<Object, double[]>> createEmbeddings(
List<CheckedFile> checkedFiles,
List<ReferencedFile> referencedFiles,
@Nullable ProgressIndicator indicator) {
var words = new ArrayList<Item<Object, double[]>>();
for (int i = 0; i < checkedFiles.size(); i++) {
for (int i = 0; i < referencedFiles.size(); i++) {
try {
var checkedFile = checkedFiles.get(i);
addEmbeddings(checkedFile, words);
var referencedFile = referencedFiles.get(i);
addEmbeddings(referencedFile, words);
if (indicator != null) {
indicator.setFraction((double) i / checkedFiles.size());
indicator.setFraction((double) i / referencedFiles.size());
}
} catch (Throwable t) {
// ignore
@ -101,24 +101,26 @@ public class EmbeddingsService {
.getContent();
}
private void addEmbeddings(CheckedFile checkedFile, List<Item<Object, double[]>> prevEmbeddings) {
var fileExtension = checkedFile.getFileExtension();
private void addEmbeddings(
ReferencedFile referencedFile,
List<Item<Object, double[]>> prevEmbeddings) {
var fileExtension = referencedFile.getFileExtension();
var codeSplitter = SplitterFactory.getCodeSplitter(fileExtension);
if (codeSplitter != null) {
var chunks = codeSplitter.split(
checkedFile.getFileName(),
checkedFile.getFileContent());
referencedFile.getFileName(),
referencedFile.getFileContent());
var embeddings = openAIClient.getEmbeddings(chunks);
for (int i = 0; i < chunks.size(); i++) {
prevEmbeddings.add(
new Word(chunks.get(i), checkedFile.getFileName(), normalize(embeddings.get(i))));
new Word(chunks.get(i), referencedFile.getFileName(), normalize(embeddings.get(i))));
}
} else {
var chunks = splitText(checkedFile.getFileContent(), 400);
var chunks = splitText(referencedFile.getFileContent(), 400);
var embeddings = getEmbeddings(chunks);
for (int i = 0; i < chunks.size(); i++) {
prevEmbeddings.add(
new Word(chunks.get(i), checkedFile.getFileName(), normalize(embeddings.get(i))));
new Word(chunks.get(i), referencedFile.getFileName(), normalize(embeddings.get(i))));
}
}
}

View file

@ -4,16 +4,17 @@ import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CheckedFile {
public class ReferencedFile {
private final String fileName;
private final String filePath;
private final String fileContent;
public CheckedFile(File file) {
public ReferencedFile(File file) {
this.fileName = file.getName();
this.filePath = file.getPath();
try {
@ -23,7 +24,7 @@ public class CheckedFile {
}
}
public CheckedFile(String fileName, String filePath, String fileContent) {
public ReferencedFile(String fileName, String filePath, String fileContent) {
this.fileName = fileName;
this.filePath = filePath;
this.fileContent = fileContent;
@ -50,4 +51,22 @@ public class CheckedFile {
}
return "";
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ReferencedFile that = (ReferencedFile) o;
return Objects.equals(filePath, that.filePath);
}
@Override
public int hashCode() {
return Objects.hash(filePath);
}
}