Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public AbstractObservationVectorStore(AbstractVectorStoreBuilder<?> builder) {
*/
@Override
public void add(List<Document> documents) {

validateNonTextDocuments(documents);
VectorStoreObservationContext observationContext = this
.createObservationContextBuilder(VectorStoreObservationContext.Operation.ADD.value())
.build();
Expand All @@ -85,6 +85,17 @@ public void add(List<Document> documents) {
.observe(() -> this.doAdd(documents));
}

private void validateNonTextDocuments(List<Document> documents) {
if (documents == null)
return;
for (Document document : documents) {
if (document != null && !document.isText()) {
throw new IllegalArgumentException(
"Only text documents are supported for now. One of the documents contains non-text content.");
}
}
}

@Override
public void delete(List<String> deleteDocIds) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,18 @@
import org.junit.jupiter.api.io.CleanupMode;
import org.junit.jupiter.api.io.TempDir;

import org.springframework.ai.content.Media;
import org.springframework.ai.document.Document;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.util.MimeType;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
Expand Down Expand Up @@ -259,4 +264,15 @@ void shouldHandleNullVectors() {
.hasMessage("Vectors must not be null");
}

@Test
void shouldFailNonTextDocuments() {
Media media = new Media(MimeType.valueOf("image/png"), new ByteArrayResource(new byte[] { 0x00 }));

Document imgDoc = Document.builder().media(media).metadata(Map.of("fileName", "pixel.png")).build();

Exception exception = assertThrows(IllegalArgumentException.class, () -> this.vectorStore.add(List.of(imgDoc)));
assertEquals("Only text documents are supported for now. One of the documents contains non-text content.",
exception.getMessage());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import org.testcontainers.qdrant.QdrantContainer;

import org.springframework.ai.content.Media;
import org.springframework.ai.document.Document;
import org.springframework.ai.document.DocumentMetadata;
import org.springframework.ai.embedding.EmbeddingModel;
Expand All @@ -49,8 +49,12 @@
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.util.MimeType;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

/**
* @author Anush Shetty
Expand All @@ -59,6 +63,7 @@
* @author Thomas Vitale
* @author Soby Chacko
* @author Jonghoon Park
* @author Kim San
* @since 0.8.1
*/
@Testcontainers
Expand Down Expand Up @@ -334,6 +339,20 @@ void shouldConvertLongToString() {
});
}

@Test
void testNonTextDocuments() {
this.contextRunner.run(context -> {
QdrantVectorStore vectorStore = context.getBean(QdrantVectorStore.class);
Media media = new Media(MimeType.valueOf("image/png"), new ByteArrayResource(new byte[] { 0x00 }));

Document imgDoc = Document.builder().media(media).metadata(Map.of("fileName", "pixel.png")).build();

Exception exception = assertThrows(IllegalArgumentException.class, () -> vectorStore.add(List.of(imgDoc)));
assertEquals("Only text documents are supported for now. One of the documents contains non-text content.",
exception.getMessage());
});
}

@SpringBootConfiguration
public static class TestApplication {

Expand Down