|
2 | 2 |
|
3 | 3 | import dev.langchain4j.model.StreamingResponseHandler;
|
4 | 4 | import dev.langchain4j.model.output.Response;
|
| 5 | +import lombok.extern.slf4j.Slf4j; |
5 | 6 | import org.bsc.async.AsyncGenerator;
|
6 | 7 | import org.bsc.async.AsyncGeneratorQueue;
|
7 | 8 |
|
|
11 | 12 |
|
12 | 13 | import static java.util.concurrent.CompletableFuture.completedFuture;
|
13 | 14 |
|
14 |
| -public class LLMStreamingGenerator<T> implements AsyncGenerator<String> { |
15 |
| - private final AsyncGeneratorQueue.Generator<String> generator ; |
| 15 | +@Slf4j |
| 16 | +public class LLMStreamingGenerator<T> extends AsyncGenerator.WithResult<String> { |
| 17 | + final BlockingQueue<AsyncGenerator.Data<String>> queue; |
16 | 18 |
|
17 | 19 | public LLMStreamingGenerator( BlockingQueue<AsyncGenerator.Data<String>> queue ) {
|
18 |
| - this.generator = new AsyncGeneratorQueue.Generator<>( queue ); |
| 20 | + super(new AsyncGeneratorQueue.Generator<>( queue )); |
| 21 | + this.queue = queue; |
19 | 22 | }
|
20 | 23 |
|
21 | 24 | public LLMStreamingGenerator() {
|
22 | 25 | this( new LinkedBlockingQueue<>());
|
23 | 26 | }
|
24 | 27 |
|
25 |
| - @Override |
26 |
| - public Data<String> next() { |
27 |
| - return generator.next(); |
28 |
| - } |
29 |
| - |
30 |
| - public AsyncGenerator<String> generator( ) { |
31 |
| - return generator; |
32 |
| - } |
33 |
| - |
34 | 28 | public StreamingResponseHandler<T> handler() {
|
35 | 29 | return new StreamingResponseHandler<T>() {
|
36 | 30 |
|
37 | 31 | @Override
|
38 | 32 | public void onNext(String token) {
|
39 |
| - generator.queue().add( AsyncGenerator.Data.of(completedFuture(token)) ); |
| 33 | + log.trace("onNext: {}", token); |
| 34 | + queue.add( AsyncGenerator.Data.of(completedFuture(token)) ); |
40 | 35 | }
|
41 | 36 |
|
42 | 37 | @Override
|
43 | 38 | public void onComplete(Response<T> response) {
|
44 |
| - generator.queue().add(AsyncGenerator.Data.done()); |
| 39 | + log.trace("onComplete: {}", response); |
| 40 | + queue.add(AsyncGenerator.Data.done(response)); |
45 | 41 | }
|
46 | 42 |
|
47 | 43 | @Override
|
48 | 44 | public void onError(Throwable error) {
|
| 45 | + log.trace("onError", error); |
49 | 46 | CompletableFuture<String> future = new CompletableFuture<>();
|
50 | 47 | future.completeExceptionally(error);
|
51 |
| - generator.queue().add( AsyncGenerator.Data.of(future) ); |
| 48 | + queue.add( AsyncGenerator.Data.of(future) ); |
52 | 49 | }
|
53 | 50 | };
|
54 | 51 | }
|
|
0 commit comments