Skip to content

Commit

Permalink
Added example for autowiring ChatModelListeners (#139)
Browse files Browse the repository at this point in the history
  • Loading branch information
dliubarskyi authored Feb 5, 2025
1 parent b068a5c commit 307809d
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
package dev.langchain4j.example.aiservice;

import dev.langchain4j.example.lowlevel.ChatLanguageModelController;
import dev.langchain4j.memory.ChatMemory;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.chat.StreamingChatLanguageModel;
import dev.langchain4j.model.chat.listener.ChatModelErrorContext;
import dev.langchain4j.model.chat.listener.ChatModelListener;
import dev.langchain4j.model.chat.listener.ChatModelRequestContext;
import dev.langchain4j.model.chat.listener.ChatModelResponseContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

Expand All @@ -15,4 +24,33 @@ class AssistantConfiguration {
ChatMemory chatMemory() {
return MessageWindowChatMemory.withMaxMessages(10);
}

/**
* This listener will be injected into every {@link ChatLanguageModel} and {@link StreamingChatLanguageModel}
* bean found in the application context.
* It will listen for {@link ChatLanguageModel} in the {@link ChatLanguageModelController} as well as
* {@link Assistant} and {@link StreamingAssistant}.
*/
@Bean
ChatModelListener chatModelListener() {
return new ChatModelListener() {

private static final Logger log = LoggerFactory.getLogger(ChatModelListener.class);

@Override
public void onRequest(ChatModelRequestContext requestContext) {
log.info("onRequest(): {}", requestContext.chatRequest());
}

@Override
public void onResponse(ChatModelResponseContext responseContext) {
log.info("onResponse(): {}", responseContext.chatResponse());
}

@Override
public void onError(ChatModelErrorContext errorContext) {
log.info("onError(): {}", errorContext.error().getMessage());
}
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
* This is an example of using a {@link ChatLanguageModel}, a low-level LangChain4j API.
*/
@RestController
class ChatLanguageModelController {
public class ChatLanguageModelController {

ChatLanguageModel chatLanguageModel;

Expand Down
8 changes: 5 additions & 3 deletions spring-boot-example/src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.chat-model.model-name=gpt-4o-mini
#langchain4j.open-ai.chat-model.log-requests=true
#langchain4j.open-ai.chat-model.log-responses=true

langchain4j.open-ai.streaming-chat-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.streaming-chat-model.model-name=gpt-4o-mini
#langchain4j.open-ai.streaming-chat-model.log-requests=true
#langchain4j.open-ai.streaming-chat-model.log-responses=true

langchain4j.open-ai.chat-model.log-requests=true
langchain4j.open-ai.chat-model.log-responses=true
logging.level.dev.langchain4j=DEBUG
logging.level.dev.ai4j.openai4j=DEBUG
logging.level.dev.ai4j.openai4j=DEBUG

0 comments on commit 307809d

Please sign in to comment.