Skip to content

Spring AI Integration

The TruthVouch Spring AI integration provides chat client and embedding client implementations that route all AI calls through TruthVouch Firewall for governance.

Status: Coming Soon (Q2 2026)

Installation

<dependency>
<groupId>com.truthvouch</groupId>
<artifactId>truthvouch-spring-ai-starter</artifactId>
<version>1.0.0</version>
</dependency>

Or with Gradle:

implementation 'com.truthvouch:truthvouch-spring-ai-starter:1.0.0'

Planned Features

  • ChatClient implementation with TruthVouch Firewall
  • EmbeddingClient with vector caching
  • Spring Boot auto-configuration with @EnableTruthVouch
  • Configuration via application.yml
  • Full governance pipeline
  • Streaming support
  • Circuit breaker and retry logic

Planned Configuration

application.yml

truthvouch:
api-key: ${TRUTHVOUCH_API_KEY}
gateway-url: https://gateway.truthvouch.com
timeout-seconds: 30
fail-mode: open
spring-ai:
model: gpt-4o # Default model
temperature: 0.7

Enable in Code

@Configuration
@EnableTruthVouch
public class AiConfig {
// Auto-configured beans provided
}

Planned Usage

Inject ChatClient

@RestController
public class ChatController {
private final ChatClient chatClient;
public ChatController(ChatClient chatClient) {
this.chatClient = chatClient;
}
@PostMapping("/ask")
public ResponseEntity<String> ask(@RequestBody String question) {
String response = chatClient.prompt()
.user(question)
.call()
.content();
// Automatically governed, fact-checked, audit-logged
return ResponseEntity.ok(response);
}
}

Streaming Responses

@GetMapping("/ask-stream")
public ResponseEntity<String> askStream(@RequestBody String question) {
chatClient.prompt()
.user(question)
.stream()
.content()
.forEach(System.out::print);
return ResponseEntity.ok("done");
}

With Embeddings

@Service
public class RagService {
private final ChatClient chatClient;
private final EmbeddingClient embeddingClient;
public String answerQuestion(String question) {
// Generate embedding for the question
float[] questionEmbedding = embeddingClient.embed(question);
// Retrieve relevant documents from vector store
List<String> relevantDocs = vectorStore.search(questionEmbedding, 5);
// Build context
String context = String.join("\n", relevantDocs);
// Query with context
String response = chatClient.prompt()
.user(String.format(
"Context:\n%s\n\nQuestion: %s",
context,
question
))
.call()
.content();
return response;
// All calls governed by TruthVouch
}
}

Timeline

  • Q2 2026: Public beta release
  • Q3 2026: GA release with full feature parity

Next Steps