Skip to content

Commit a8470a3

Browse files
committed
✨ Extrapolating state of conversation
1 parent 2f9ed12 commit a8470a3

File tree

4 files changed

+34
-11
lines changed

4 files changed

+34
-11
lines changed

spring-boot-starter-replicate/src/main/java/io/graversen/replicate/common/TextConversation.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import java.util.ArrayList;
77
import java.util.List;
8+
import java.util.Optional;
89

910
@Value
1011
public class TextConversation {
@@ -46,4 +47,8 @@ public List<TextMessage> getFirstMessages(@NonNull Integer conversationSize) {
4647
.limit(conversationSize)
4748
.toList();
4849
}
50+
51+
public Optional<TextMessage> getLastMessage() {
52+
return messages.isEmpty() ? Optional.empty() : Optional.of(messages.getLast());
53+
}
4954
}

spring-boot-starter-replicate/src/main/java/io/graversen/replicate/facade/ReplicateFacade.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ public CompletableFuture<PredictionResponseAndModel> createPrediction(
3030
) {
3131
return CompletableFuture
3232
.supplyAsync(doCreatePrediction(model, createPrediction), executorService)
33-
.thenApplyAsync(checkAndEmitPredictionCreationTask, executorService)
34-
.thenApplyAsync(pollPredictionStatusTask, executorService)
35-
.whenCompleteAsync(emitPredictionResponseTask, executorService);
33+
.thenApply(checkAndEmitPredictionCreationTask)
34+
.thenApply(pollPredictionStatusTask)
35+
.whenComplete(emitPredictionResponseTask);
3636
}
3737

3838
public CompletableFuture<PredictionResponseAndModel> createPrediction(
@@ -41,9 +41,9 @@ public CompletableFuture<PredictionResponseAndModel> createPrediction(
4141
) {
4242
return CompletableFuture
4343
.supplyAsync(doCreatePrediction(model, createPrediction), executorService)
44-
.thenApplyAsync(checkAndEmitPredictionCreationTask, executorService)
45-
.thenApplyAsync(pollPredictionStatusTask, executorService)
46-
.whenCompleteAsync(emitPredictionResponseTask, executorService);
44+
.thenApply(checkAndEmitPredictionCreationTask)
45+
.thenApply(pollPredictionStatusTask)
46+
.whenComplete(emitPredictionResponseTask);
4747
}
4848

4949
Supplier<Optional<PredictionResponseAndModel>> doCreatePrediction(

spring-boot-starter-replicate/src/main/java/io/graversen/replicate/service/Conversation.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33
import io.graversen.replicate.common.ReplicateModel;
44
import io.graversen.replicate.common.TextConversation;
55
import io.graversen.replicate.common.TextMessage;
6-
import lombok.AccessLevel;
7-
import lombok.NonNull;
8-
import lombok.RequiredArgsConstructor;
9-
import lombok.Value;
6+
import io.graversen.replicate.common.TextPredictionRoles;
7+
import lombok.*;
108

119
import java.util.UUID;
1210

@@ -45,7 +43,20 @@ public Conversation update(@NonNull TextConversation conversation) {
4543
);
4644
}
4745

46+
@ToString.Include
47+
public ConversationStates getState() {
48+
if (conversation.getMessages().isEmpty()) {
49+
return ConversationStates.IDLE;
50+
}
51+
52+
final var isLastMessageFromUser = conversation.getLastMessage()
53+
.map(message -> message.getRole().equals(TextPredictionRoles.USER.asString()))
54+
.orElse(false);
55+
56+
return isLastMessageFromUser ? ConversationStates.WAITING_FOR_ASSISTANT : ConversationStates.WAITING_FOR_USER;
57+
}
58+
4859
private static String createId() {
49-
return String.format("c_%s", UUID.randomUUID().toString());
60+
return String.format("c_%s", UUID.randomUUID());
5061
}
5162
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package io.graversen.replicate.service;
2+
3+
public enum ConversationStates {
4+
IDLE,
5+
WAITING_FOR_ASSISTANT,
6+
WAITING_FOR_USER
7+
}

0 commit comments

Comments
 (0)