62 lines
1.8 KiB
Groovy
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
|
|
}
|
|
}
|
|
}
|
|
}
|