chatapi/src/main/java/eu/m724/example/ExampleSource.groovy
2024-08-28 15:48:52 +02:00

62 lines
1.8 KiB
Groovy

package eu.m724.example
import eu.m724.chat.Chat
import eu.m724.chat.ChatMessage
import eu.m724.responsesource.ChatResponse
import eu.m724.responsesource.ChatResponseSource
import eu.m724.responsesource.ChatResponseSourceInfo
import java.util.concurrent.CompletableFuture
import java.util.concurrent.Executors
import java.util.concurrent.LinkedBlockingDeque
import java.util.concurrent.LinkedBlockingQueue
/**
* an example chatresponsesource chatresponsesource ChatResponseSource CHATRESPONSESOURCE CAHTSERREPOSNECSOURCE
* note to self: rename that already...
*/
class ExampleSource implements ChatResponseSource {
private ChatResponseSourceInfo info =
new ChatResponseSourceInfo("yo", "ye", "1.0", 1)
private Random random = new Random()
@Override
ChatResponseSourceInfo info() {
return info
}
@Override
ChatResponse ask(Chat chat) {
String[] parts = "hello how can I assist you today".split(" ")
LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<>()
CompletableFuture<ChatMessage> future = CompletableFuture.supplyAsync {
for (int i=0; i<parts.length; i++) {
String token = (i > 0 ? " " : "") + parts[i]
queue.put(token);
Thread.sleep(random.nextInt(200, 500))
}
queue.put("END_OF_TEXT")
return new ChatMessage(true, parts.join(" "))
}
return new ChatResponse() {
@Override
boolean isStreaming() {
return false
}
@Override
LinkedBlockingQueue<String> textQueue() {
return queue
}
@Override
CompletableFuture<ChatMessage> message() {
return future
}
}
}
}