Comprehensive developer toolkit providing reusable skills for Java/Spring Boot, TypeScript/NestJS/React/Next.js, Python, PHP, AWS CloudFormation, AI/RAG, DevOps, and more.
82
82%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Risky
Do not use without reviewing
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.ollama.OllamaChatModel;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.AfterAll;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import org.testcontainers.utility.DockerImageName;
@Testcontainers
class OllamaIntegrationTest {
@Container
static GenericContainer<?> ollama = new GenericContainer<>(
DockerImageName.parse("ollama/ollama:0.5.4")
).withExposedPorts(11434);
private static ChatModel chatModel;
@BeforeAll
static void setup() {
chatModel = OllamaChatModel.builder()
.baseUrl(ollama.getEndpoint())
.modelName("llama2") // Use a lightweight model for testing
.temperature(0.0)
.timeout(java.time.Duration.ofSeconds(30))
.build();
}
@Test
void shouldGenerateResponseWithOllama() {
// Act
String response = chatModel.generate("What is 2 + 2?");
// Assert
assertNotNull(response);
assertFalse(response.trim().isEmpty());
assertTrue(response.contains("4") || response.toLowerCase().contains("four"));
}
@Test
void shouldHandleComplexQuery() {
// Act
String response = chatModel.generate(
"Explain the difference between ArrayList and LinkedList in Java"
);
// Assert
assertNotNull(response);
assertTrue(response.length() > 50);
assertTrue(response.toLowerCase().contains("arraylist"));
assertTrue(response.toLowerCase().contains("linkedlist"));
}
}import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.ollama.OllamaEmbeddingModel;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
class EmbeddingStoreIntegrationTest {
private EmbeddingModel embeddingModel;
private EmbeddingStore<TextSegment> embeddingStore;
@BeforeEach
void setup() {
// Use in-memory store for faster tests
embeddingStore = new InMemoryEmbeddingStore();
// For production tests, you could use Testcontainers with Chroma/Weaviate
embeddingModel = OllamaEmbeddingModel.builder()
.baseUrl("http://localhost:11434")
.modelName("nomic-embed-text")
.build();
}
@Test
void shouldStoreAndRetrieveEmbeddings() {
// Arrange
TextSegment segment = TextSegment.from("Java is a programming language");
Embedding embedding = embeddingModel.embed(segment.text()).content();
// Act
String id = embeddingStore.add(embedding, segment);
// Assert
assertNotNull(id);
// Verify retrieval
var searchRequest = EmbeddingSearchRequest.builder()
.queryEmbedding(embedding)
.maxResults(1)
.build();
List<EmbeddingMatch<TextSegment>> matches = embeddingStore.search(searchRequest);
assertEquals(1, matches.size());
assertEquals(segment.text(), matches.get(0).embedded().text());
}
}import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.DocumentSplitter;
import dev.langchain4j.data.document.splitter.ParagraphSplitter;
import dev.langchain4j.rag.content.retriever.ContentRetriever;
import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class RagSystemTest {
private ContentRetriever contentRetriever;
private ChatModel chatModel;
@BeforeEach
void setup() {
// Setup embedding store
EmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore();
// Setup embedding model
EmbeddingModel embeddingModel = OllamaEmbeddingModel.builder()
.baseUrl("http://localhost:11434")
.modelName("nomic-embed-text")
.build();
// Setup content retriever
contentRetriever = EmbeddingStoreContentRetriever.builder()
.embeddingModel(embeddingModel)
.embeddingStore(embeddingStore)
.maxResults(3)
.build();
// Setup chat model
chatModel = OllamaChatModel.builder()
.baseUrl("http://localhost:11434")
.modelName("llama2")
.build();
// Ingest test documents
ingestTestDocuments(embeddingStore, embeddingModel);
}
private void ingestTestDocuments(EmbeddingStore<TextSegment> store, EmbeddingModel model) {
DocumentSplitter splitter = new ParagraphSplitter();
Document doc1 = Document.from("Spring Boot is a Java framework for building microservices");
Document doc2 = Document.from("Maven is a build automation tool for Java projects");
Document doc3 = Document.from("JUnit is a testing framework for Java applications");
List<Document> documents = List.of(doc1, doc2, doc3);
EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder()
.embeddingModel(model)
.embeddingStore(store)
.documentSplitter(splitter)
.build();
ingestor.ingest(documents);
}
@Test
void shouldRetrieveRelevantContent() {
// Arrange
RagAssistant assistant = AiServices.builder(RagAssistant.class)
.chatLanguageModel(chatModel)
.contentRetriever(contentRetriever)
.build();
// Act
String response = assistant.chat("What is Spring Boot?");
// Assert
assertNotNull(response);
assertTrue(response.toLowerCase().contains("spring boot"));
assertTrue(response.toLowerCase().contains("framework"));
}
interface RagAssistant {
String chat(String message);
}
}import dev.langchain4j.model.chat.ChatModel;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import java.time.Duration;
import java.time.Instant;
import static org.junit.jupiter.api.Assertions.*;
class PerformanceTest {
@Test
@Timeout(30)
void shouldRespondWithinTimeLimit() {
// Arrange
ChatModel model = OllamaChatModel.builder()
.baseUrl("http://localhost:11434")
.modelName("llama2")
.timeout(Duration.ofSeconds(20))
.build();
// Act
Instant start = Instant.now();
String response = model.generate("What is 2 + 2?");
Instant end = Instant.now();
// Assert
Duration duration = Duration.between(start, end);
assertTrue(duration.toSeconds() < 15, "Response took too long: " + duration);
assertNotNull(response);
}
}import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.output.TokenUsage;
@Test
void shouldTrackTokenUsage() {
// Arrange
ChatModel mockModel = mock(ChatModel.class);
var mockResponse = Response.from(
AiMessage.from("Response"),
new TokenUsage(10, 20, 30)
);
when(mockModel.generate(any(String.class)))
.thenReturn(mockResponse);
// Act
var response = mockModel.generate("Test query");
// Assert
assertEquals(10, response.tokenUsage().inputTokenCount());
assertEquals(20, response.tokenUsage().outputTokenCount());
assertEquals(30, response.tokenUsage().totalTokenCount());
}import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.qdrant.QdrantEmbeddingStore;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import org.testcontainers.utility.DockerImageName;
@Testcontainers
class QdrantIntegrationTest {
@Container
static GenericContainer<?> qdrant = new GenericContainer<>(
DockerImageName.parse("qdrant/qdrant:v1.13.2")
).withExposedPorts(6333);
private EmbeddingStore<TextSegment> embeddingStore;
@BeforeEach
void setup() {
var host = qdrant.getHost();
var port = qdrant.getFirstMappedPort();
embeddingStore = QdrantEmbeddingStore.builder()
.host(host)
.port(port)
.collectionName("test-collection")
.build();
}
@Test
void shouldStoreAndRetrieveVectors() {
// Arrange
var text = "Spring Boot is a Java framework";
var embeddingModel = createMockEmbeddingModel(text);
var segment = TextSegment.from(text);
// Act
String id = embeddingStore.add(embeddingModel.embed(text).content(), segment);
// Assert
assertNotNull(id);
var searchRequest = EmbeddingSearchRequest.builder()
.queryEmbedding(embeddingModel.embed(text).content())
.maxResults(1)
.build();
var result = embeddingStore.search(searchRequest);
assertEquals(1, result.matches().size());
}
}plugins
developer-kit-ai
skills
chunking-strategy
prompt-engineering
developer-kit-aws
skills
aws
aws-cli-beast
aws-cost-optimization
aws-drawio-architecture-diagrams
aws-sam-bootstrap
aws-cloudformation
aws-cloudformation-auto-scaling
references
aws-cloudformation-bedrock
references
aws-cloudformation-cloudfront
references
aws-cloudformation-cloudwatch
references
aws-cloudformation-dynamodb
references
aws-cloudformation-ec2
aws-cloudformation-ecs
references
aws-cloudformation-elasticache
aws-cloudformation-iam
references
aws-cloudformation-lambda
references
aws-cloudformation-rds
aws-cloudformation-s3
references
aws-cloudformation-security
references
aws-cloudformation-task-ecs-deploy-gh
aws-cloudformation-vpc
developer-kit-core
skills
developer-kit-java
skills
aws-lambda-java-integration
aws-rds-spring-boot-integration
aws-sdk-java-v2-bedrock
aws-sdk-java-v2-core
aws-sdk-java-v2-dynamodb
aws-sdk-java-v2-kms
aws-sdk-java-v2-lambda
aws-sdk-java-v2-messaging
aws-sdk-java-v2-rds
aws-sdk-java-v2-s3
aws-sdk-java-v2-secrets-manager
graalvm-native-image
langchain4j
langchain4j-mcp-server-patterns
langchain4j-ai-services-patterns
references
langchain4j-mcp-server-patterns
references
langchain4j-rag-implementation-patterns
references
langchain4j-spring-boot-integration
langchain4j-testing-strategies
langchain4j-tool-function-calling-patterns
langchain4j-vector-stores-configuration
references
qdrant
references
spring-ai-mcp-server-patterns
references
spring-boot-actuator
spring-boot-cache
spring-boot-crud-patterns
spring-boot-dependency-injection
spring-boot-event-driven-patterns
spring-boot-openapi-documentation
spring-boot-project-creator
spring-boot-resilience4j
spring-boot-rest-api-standards
spring-boot-saga-pattern
spring-boot-security-jwt
assets
references
scripts
spring-boot-test-patterns
spring-data-jpa
references
spring-data-neo4j
references
unit-test-application-events
unit-test-bean-validation
unit-test-boundary-conditions
unit-test-caching
unit-test-config-properties
unit-test-controller-layer
unit-test-exception-handler
unit-test-json-serialization
unit-test-mapper-converter
unit-test-parameterized
unit-test-scheduled-async
unit-test-service-layer
unit-test-utility-methods
unit-test-wiremock-rest-api
developer-kit-php
skills
aws-lambda-php-integration
developer-kit-python
skills
aws-lambda-python-integration
developer-kit-tools
developer-kit-typescript
skills
aws-lambda-typescript-integration
better-auth
drizzle-orm-patterns
dynamodb-toolbox-patterns
references
nestjs
nestjs-best-practices
nestjs-code-review
nestjs-drizzle-crud-generator
scripts
nextjs-app-router
nextjs-authentication
nextjs-code-review
nextjs-data-fetching
references
nextjs-deployment
nextjs-performance
nx-monorepo
react-code-review
react-patterns
references
shadcn-ui
tailwind-css-patterns
references
tailwind-design-system
references
turborepo-monorepo
typescript-docs
typescript-security-review
zod-validation-utilities