Skip to content

Commit c102f66

Browse files
author
Milder Hernandez
authored
Merge pull request #166 from johnoliver/memory
Memory updates for sample app
2 parents 88e7fe7 + 016f08f commit c102f66

27 files changed

+319
-260
lines changed

api-test/integration-tests/src/test/java/com/microsoft/semantickernel/tests/connectors/memory/jdbc/JDBCVectorStoreRecordCollectionTest.java

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,34 @@
11
package com.microsoft.semantickernel.tests.connectors.memory.jdbc;
22

3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotNull;
5+
import static org.junit.jupiter.api.Assertions.assertNull;
6+
37
import com.microsoft.semantickernel.connectors.data.jdbc.JDBCVectorStoreRecordCollection;
48
import com.microsoft.semantickernel.connectors.data.jdbc.JDBCVectorStoreRecordCollectionOptions;
59
import com.microsoft.semantickernel.connectors.data.jdbc.MySQLVectorStoreQueryProvider;
610
import com.microsoft.semantickernel.data.recordoptions.GetRecordOptions;
711
import com.microsoft.semantickernel.tests.connectors.memory.Hotel;
812
import com.mysql.cj.jdbc.MysqlDataSource;
13+
import java.util.ArrayList;
14+
import java.util.Arrays;
15+
import java.util.List;
16+
import javax.annotation.Nonnull;
917
import org.junit.jupiter.api.BeforeAll;
1018
import org.junit.jupiter.api.Test;
1119
import org.testcontainers.containers.MySQLContainer;
1220
import org.testcontainers.junit.jupiter.Container;
1321
import org.testcontainers.junit.jupiter.Testcontainers;
1422

15-
import javax.annotation.Nonnull;
16-
import javax.sql.DataSource;
17-
import java.sql.Connection;
18-
import java.sql.DriverManager;
19-
import java.sql.SQLException;
20-
import java.util.ArrayList;
21-
import java.util.Arrays;
22-
import java.util.List;
23-
24-
import static org.junit.jupiter.api.Assertions.assertEquals;
25-
import static org.junit.jupiter.api.Assertions.assertNotNull;
26-
import static org.junit.jupiter.api.Assertions.assertNull;
27-
2823
@Testcontainers
2924
public class JDBCVectorStoreRecordCollectionTest {
25+
3026
@Container
3127
private static final MySQLContainer<?> CONTAINER = new MySQLContainer<>("mysql:5.7.34");
3228
private static final String MYSQL_USER = "test";
3329
private static final String MYSQL_PASSWORD = "test";
3430
private static MysqlDataSource dataSource;
31+
3532
@BeforeAll
3633
static void setup() {
3734
dataSource = new MysqlDataSource();
@@ -40,16 +37,17 @@ static void setup() {
4037
dataSource.setPassword(MYSQL_PASSWORD);
4138
}
4239

43-
private JDBCVectorStoreRecordCollection<Hotel> buildRecordCollection(@Nonnull String collectionName) {
44-
JDBCVectorStoreRecordCollection<Hotel> recordCollection = new JDBCVectorStoreRecordCollection<>(
45-
dataSource,
46-
collectionName,
47-
JDBCVectorStoreRecordCollectionOptions.<Hotel>builder()
48-
.withRecordClass(Hotel.class)
49-
.withQueryProvider(MySQLVectorStoreQueryProvider.builder()
50-
.withDataSource(dataSource)
51-
.build())
52-
.build());
40+
private JDBCVectorStoreRecordCollection<Hotel> buildRecordCollection(
41+
@Nonnull String collectionName) {
42+
JDBCVectorStoreRecordCollection<Hotel> recordCollection = new JDBCVectorStoreRecordCollection<>(
43+
dataSource,
44+
collectionName,
45+
JDBCVectorStoreRecordCollectionOptions.<Hotel>builder()
46+
.withRecordClass(Hotel.class)
47+
.withQueryProvider(MySQLVectorStoreQueryProvider.builder()
48+
.withDataSource(dataSource)
49+
.build())
50+
.build());
5351

5452
recordCollection.prepareAsync().block();
5553
recordCollection.createCollectionIfNotExistsAsync().block();
@@ -63,11 +61,16 @@ public void buildRecordCollection() {
6361

6462
private List<Hotel> getHotels() {
6563
return List.of(
66-
new Hotel("id_1", "Hotel 1", 1, "Hotel 1 description", Arrays.asList(1.0f, 2.0f, 3.0f), 4.0),
67-
new Hotel("id_2", "Hotel 2", 2, "Hotel 2 description", Arrays.asList(1.0f, 2.0f, 3.0f), 3.0),
68-
new Hotel("id_3", "Hotel 3", 3, "Hotel 3 description", Arrays.asList(1.0f, 2.0f, 3.0f), 5.0),
69-
new Hotel("id_4", "Hotel 4", 4, "Hotel 4 description", Arrays.asList(1.0f, 2.0f, 3.0f), 4.0),
70-
new Hotel("id_5", "Hotel 5", 5, "Hotel 5 description", Arrays.asList(1.0f, 2.0f, 3.0f), 5.0)
64+
new Hotel("id_1", "Hotel 1", 1, "Hotel 1 description", Arrays.asList(1.0f, 2.0f, 3.0f),
65+
4.0),
66+
new Hotel("id_2", "Hotel 2", 2, "Hotel 2 description", Arrays.asList(1.0f, 2.0f, 3.0f),
67+
3.0),
68+
new Hotel("id_3", "Hotel 3", 3, "Hotel 3 description", Arrays.asList(1.0f, 2.0f, 3.0f),
69+
5.0),
70+
new Hotel("id_4", "Hotel 4", 4, "Hotel 4 description", Arrays.asList(1.0f, 2.0f, 3.0f),
71+
4.0),
72+
new Hotel("id_5", "Hotel 5", 5, "Hotel 5 description", Arrays.asList(1.0f, 2.0f, 3.0f),
73+
5.0)
7174
);
7275
}
7376

api-test/integration-tests/src/test/java/com/microsoft/semantickernel/tests/connectors/memory/jdbc/JDBCVectorStoreTest.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,22 @@
11
package com.microsoft.semantickernel.tests.connectors.memory.jdbc;
22

3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotNull;
5+
import static org.junit.jupiter.api.Assertions.assertTrue;
6+
37
import com.microsoft.semantickernel.connectors.data.jdbc.JDBCVectorStore;
48
import com.microsoft.semantickernel.connectors.data.jdbc.JDBCVectorStoreOptions;
59
import com.microsoft.semantickernel.connectors.data.jdbc.MySQLVectorStoreQueryProvider;
610
import com.microsoft.semantickernel.tests.connectors.memory.Hotel;
711
import com.mysql.cj.jdbc.MysqlDataSource;
12+
import java.util.Arrays;
13+
import java.util.List;
814
import org.junit.jupiter.api.BeforeAll;
915
import org.junit.jupiter.api.Test;
1016
import org.testcontainers.containers.MySQLContainer;
1117
import org.testcontainers.junit.jupiter.Container;
1218
import org.testcontainers.junit.jupiter.Testcontainers;
1319

14-
import java.sql.Connection;
15-
import java.sql.DriverManager;
16-
import java.sql.SQLException;
17-
import java.util.Arrays;
18-
import java.util.List;
19-
20-
import static org.junit.jupiter.api.Assertions.assertEquals;
21-
import static org.junit.jupiter.api.Assertions.assertNotNull;
22-
import static org.junit.jupiter.api.Assertions.assertTrue;
23-
2420
@Testcontainers
2521
public class JDBCVectorStoreTest {
2622
@Container
@@ -43,7 +39,7 @@ public void getCollectionNamesAsync() {
4339
.withDataSource(dataSource)
4440
.build();
4541

46-
JDBCVectorStore vectorStore = JDBCVectorStore.builder()
42+
JDBCVectorStore vectorStore = JDBCVectorStore.builder()
4743
.withDataSource(dataSource)
4844
.withOptions(
4945
JDBCVectorStoreOptions.builder()

samples/semantickernel-concepts/semantickernel-syntax-examples/src/main/java/com/microsoft/semantickernel/samples/syntaxexamples/memory/AzureAISearch_DataStorage.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,22 @@
1313
import com.microsoft.semantickernel.aiservices.openai.textembedding.OpenAITextEmbeddingGenerationService;
1414
import com.microsoft.semantickernel.connectors.data.azureaisearch.AzureAISearchVectorStore;
1515
import com.microsoft.semantickernel.connectors.data.azureaisearch.AzureAISearchVectorStoreOptions;
16-
import com.microsoft.semantickernel.connectors.data.azureaisearch.AzureAISearchVectorStoreRecordCollection;
16+
import com.microsoft.semantickernel.data.VectorStoreRecordCollection;
1717
import com.microsoft.semantickernel.data.recordattributes.VectorStoreRecordDataAttribute;
1818
import com.microsoft.semantickernel.data.recordattributes.VectorStoreRecordKeyAttribute;
1919
import com.microsoft.semantickernel.data.recordattributes.VectorStoreRecordVectorAttribute;
20-
import reactor.core.publisher.Flux;
21-
import reactor.core.publisher.Mono;
22-
2320
import java.nio.charset.StandardCharsets;
2421
import java.util.Arrays;
2522
import java.util.Base64;
2623
import java.util.Collections;
2724
import java.util.List;
2825
import java.util.Map;
2926
import java.util.stream.Collectors;
27+
import reactor.core.publisher.Flux;
28+
import reactor.core.publisher.Mono;
3029

3130
public class AzureAISearch_DataStorage {
31+
3232
private static final String CLIENT_KEY = System.getenv("CLIENT_KEY");
3333
private static final String AZURE_CLIENT_KEY = System.getenv("AZURE_CLIENT_KEY");
3434

@@ -45,6 +45,7 @@ public class AzureAISearch_DataStorage {
4545
private static final int EMBEDDING_DIMENSIONS = 1536;
4646

4747
static class GitHubFile {
48+
4849
@VectorStoreRecordKeyAttribute()
4950
private final String id;
5051
@VectorStoreRecordDataAttribute(hasEmbedding = true, embeddingFieldName = "embedding")
@@ -120,7 +121,9 @@ public static void dataStorageWithAzureAISearch(
120121
.build();
121122

122123
String collectionName = "skgithubfiles";
123-
var collection = azureAISearchVectorStore.getCollection(collectionName, GitHubFile.class,
124+
var collection = azureAISearchVectorStore.getCollection(
125+
collectionName,
126+
GitHubFile.class,
124127
null);
125128

126129
// Create collection if it does not exist and store data
@@ -140,7 +143,7 @@ public static void dataStorageWithAzureAISearch(
140143
}
141144

142145
private static Mono<List<String>> storeData(
143-
AzureAISearchVectorStoreRecordCollection<GitHubFile> recordStore,
146+
VectorStoreRecordCollection<String, GitHubFile> recordStore,
144147
OpenAITextEmbeddingGenerationService embeddingGeneration,
145148
Map<String, String> data) {
146149

samples/semantickernel-concepts/semantickernel-syntax-examples/src/main/java/com/microsoft/semantickernel/samples/syntaxexamples/memory/InMemory_DataStorage.java

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,22 @@
55
import com.azure.ai.openai.OpenAIClientBuilder;
66
import com.azure.core.credential.AzureKeyCredential;
77
import com.azure.core.credential.KeyCredential;
8-
import com.azure.core.util.ClientOptions;
9-
import com.azure.core.util.MetricsOptions;
10-
import com.azure.core.util.TracingOptions;
11-
import com.azure.search.documents.indexes.SearchIndexAsyncClient;
12-
import com.azure.search.documents.indexes.SearchIndexClientBuilder;
138
import com.microsoft.semantickernel.aiservices.openai.textembedding.OpenAITextEmbeddingGenerationService;
14-
import com.microsoft.semantickernel.connectors.data.azureaisearch.AzureAISearchVectorStore;
15-
import com.microsoft.semantickernel.connectors.data.azureaisearch.AzureAISearchVectorStoreOptions;
16-
import com.microsoft.semantickernel.connectors.data.azureaisearch.AzureAISearchVectorStoreRecordCollection;
9+
import com.microsoft.semantickernel.data.VectorStoreRecordCollection;
1710
import com.microsoft.semantickernel.data.VolatileVectorStore;
18-
import com.microsoft.semantickernel.data.VolatileVectorStoreRecordCollection;
1911
import com.microsoft.semantickernel.data.recordattributes.VectorStoreRecordDataAttribute;
2012
import com.microsoft.semantickernel.data.recordattributes.VectorStoreRecordKeyAttribute;
2113
import com.microsoft.semantickernel.data.recordattributes.VectorStoreRecordVectorAttribute;
22-
import reactor.core.publisher.Flux;
23-
import reactor.core.publisher.Mono;
24-
25-
import java.nio.charset.StandardCharsets;
2614
import java.util.Arrays;
27-
import java.util.Base64;
2815
import java.util.Collections;
2916
import java.util.List;
3017
import java.util.Map;
3118
import java.util.stream.Collectors;
19+
import reactor.core.publisher.Flux;
20+
import reactor.core.publisher.Mono;
3221

3322
public class InMemory_DataStorage {
23+
3424
private static final String CLIENT_KEY = System.getenv("CLIENT_KEY");
3525
private static final String AZURE_CLIENT_KEY = System.getenv("AZURE_CLIENT_KEY");
3626

@@ -43,6 +33,7 @@ public class InMemory_DataStorage {
4333
private static final int EMBEDDING_DIMENSIONS = 1536;
4434

4535
static class GitHubFile {
36+
4637
@VectorStoreRecordKeyAttribute()
4738
private final String id;
4839
@VectorStoreRecordDataAttribute(hasEmbedding = true, embeddingFieldName = "embedding")
@@ -72,8 +63,7 @@ public String getDescription() {
7263
}
7364

7465
static String encodeId(String realId) {
75-
byte[] bytes = Base64.getUrlEncoder().encode(realId.getBytes(StandardCharsets.UTF_8));
76-
return new String(bytes, StandardCharsets.UTF_8);
66+
return AzureAISearch_DataStorage.GitHubFile.encodeId(realId);
7767
}
7868
}
7969

@@ -126,7 +116,7 @@ public static void inMemoryDataStorage(
126116
}
127117

128118
private static Mono<List<String>> storeData(
129-
VolatileVectorStoreRecordCollection<GitHubFile> recordCollection,
119+
VectorStoreRecordCollection<String, GitHubFile> recordCollection,
130120
OpenAITextEmbeddingGenerationService embeddingGeneration,
131121
Map<String, String> data) {
132122

0 commit comments

Comments
 (0)