diff --git a/samples/spring-ai-agent/README.md b/samples/spring-ai-agent/README.md index 06805ec5..fd742b5c 100644 --- a/samples/spring-ai-agent/README.md +++ b/samples/spring-ai-agent/README.md @@ -6,19 +6,8 @@ ## Examples HTTP requests chat-requests.http -## Prerequisite for external memory: PostgreSQL, for application started locally without container -``` -docker run --name my-postgres \ ✘ 125 --e POSTGRES_DB=ai-agent-db \ --e POSTGRES_USER=chatuser \ --e POSTGRES_PASSWORD=chatpass \ --p 5432:5432 \ --d pgvector/pgvector:pg16 -``` +## Run locally +Run with test run to connect a pg-vector test containers for local dev -## Build Docker Image with JIB plugin -- mvn compile jib:dockerBuild - -## Run postgres and spring-ai-agent containers -docker-compose up +`mvn spring-boot:test-run` diff --git a/samples/spring-ai-agent/pom.xml b/samples/spring-ai-agent/pom.xml index 86ea36db..5bc84d4a 100644 --- a/samples/spring-ai-agent/pom.xml +++ b/samples/spring-ai-agent/pom.xml @@ -42,12 +42,20 @@ org.springframework.ai spring-ai-starter-model-bedrock-converse + + org.springframework.ai + spring-ai-starter-model-bedrock + org.springframework.ai spring-ai-starter-vector-store-pgvector + + org.springframework.ai + spring-ai-advisors-vector-store + @@ -83,11 +91,21 @@ ${testcontainers.version} test + + org.springframework.boot + spring-boot-testcontainers + test + org.springframework.boot spring-boot-starter-test test + + org.springframework.boot + spring-boot-devtools + test + diff --git a/samples/spring-ai-agent/src/test/java/com/aws/workshop/ai/agent/TestAiAgentApplication.java b/samples/spring-ai-agent/src/test/java/com/aws/workshop/ai/agent/TestAiAgentApplication.java new file mode 100644 index 00000000..5eaf7847 --- /dev/null +++ b/samples/spring-ai-agent/src/test/java/com/aws/workshop/ai/agent/TestAiAgentApplication.java @@ -0,0 +1,46 @@ + +import com.aws.workshop.ai.agent.AiAgentApplication; +import org.springframework.ai.document.Document; +import org.springframework.ai.vectorstore.VectorStore; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.devtools.restart.RestartScope; +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.testcontainers.containers.PostgreSQLContainer; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.DockerImageName; + +import java.util.List; +import java.util.Map; + +public class TestAiAgentApplication { + + + public static void main(String[] args) { + System.out.println("!!!!!Starting test application"); + System.setProperty("spring.sql.init.mode", "always"); + SpringApplication.from(AiAgentApplication::main) + .with(TestContainersConfiguration.class) + .run(args); + } +} + + +@Configuration +@Testcontainers +class TestContainersConfiguration { + + @Bean + @ServiceConnection + @RestartScope + PostgreSQLContainer postgreSQLContainer() { + System.out.println("Starting postgreSQL container"); + var image = DockerImageName.parse("pgvector/pgvector:pg16") + .asCompatibleSubstituteFor("postgres"); + return new PostgreSQLContainer<>(image); + } +} + + diff --git a/samples/spring-ai-agent/src/test/resources/application-test.yaml b/samples/spring-ai-agent/src/test/resources/application-test.yaml new file mode 100644 index 00000000..f37fdbe1 --- /dev/null +++ b/samples/spring-ai-agent/src/test/resources/application-test.yaml @@ -0,0 +1,14 @@ +spring: + sql: + init: + mode: always + jpa: + hibernate: + ddl-auto: none + datasource: + driver-class-name: org.postgresql.Driver + ai: + vectorstore: + pgvector: + dimensions: 1024 + initialize-schema: true