aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/rendering
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/rendering')
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/EventRenderer.java (renamed from container-search/src/main/java/com/yahoo/search/rendering/TokenRenderer.java)31
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java14
2 files changed, 21 insertions, 24 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/TokenRenderer.java b/container-search/src/main/java/com/yahoo/search/rendering/EventRenderer.java
index 0b0c018e1ac..4cca0fcce9f 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/TokenRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/EventRenderer.java
@@ -1,6 +1,6 @@
package com.yahoo.search.rendering;
-import ai.vespa.search.llm.TokenStream;
+import com.yahoo.search.result.EventStream;
import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonFactoryBuilder;
@@ -18,19 +18,16 @@ import com.yahoo.search.result.ErrorMessage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.concurrent.Executor;
-import java.util.logging.Logger;
import static com.fasterxml.jackson.databind.SerializationFeature.FLUSH_AFTER_WRITE_VALUE;
/**
- *
- * A comment about SSE
+ * A Server-Sent Events (SSE) renderer for asynchronous events such as
+ * tokens from a language model.
*
* @author lesters
*/
-public class TokenRenderer extends AsynchronousSectionedRenderer<Result> {
-
- private static final Logger log = Logger.getLogger(TokenRenderer.class.getName());
+public class EventRenderer extends AsynchronousSectionedRenderer<Result> {
private static final JsonFactory generatorFactory = createGeneratorFactory();
private volatile JsonGenerator generator;
@@ -43,14 +40,14 @@ public class TokenRenderer extends AsynchronousSectionedRenderer<Result> {
return factory;
}
- private static final boolean RENDER_TOKEN_EVENT_HEADER = true;
+ private static final boolean RENDER_EVENT_HEADER = true;
private static final boolean RENDER_END_EVENT = true;
- public TokenRenderer() {
+ public EventRenderer() {
this(null);
}
- public TokenRenderer(Executor executor) {
+ public EventRenderer(Executor executor) {
super(executor);
}
@@ -62,21 +59,21 @@ public class TokenRenderer extends AsynchronousSectionedRenderer<Result> {
@Override
public void beginList(DataList<?> dataList) throws IOException {
- if ( ! (dataList instanceof TokenStream)) {
- throw new IllegalArgumentException("TokenRenderer currently only supports TokenStreams");
+ if ( ! (dataList instanceof EventStream)) {
+ throw new IllegalArgumentException("EventRenderer currently only supports EventStreams");
// Todo: support results and timing and trace by delegating to JsonRenderer
}
}
@Override
public void data(Data data) throws IOException {
- if (data instanceof TokenStream.Token token) {
- if (RENDER_TOKEN_EVENT_HEADER) {
- generator.writeRaw("event: token\n");
+ if (data instanceof EventStream.Event event) {
+ if (RENDER_EVENT_HEADER) {
+ generator.writeRaw("event: " + event.type() + "\n");
}
generator.writeRaw("data: ");
generator.writeStartObject();
- generator.writeStringField("token", token.toString());
+ generator.writeStringField(event.type(), event.toString());
generator.writeEndObject();
generator.writeRaw("\n\n");
generator.flush();
@@ -115,7 +112,7 @@ public class TokenRenderer extends AsynchronousSectionedRenderer<Result> {
@Override
public String getMimeType() {
- return "application/json";
+ return "text/event-stream";
}
}
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java b/container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java
index ad6875b6c9b..d62860afcda 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java
@@ -24,7 +24,7 @@ public final class RendererRegistry extends ComponentRegistry<com.yahoo.processi
public static final ComponentId xmlRendererId = ComponentId.fromString("XmlRenderer");
public static final ComponentId pageRendererId = ComponentId.fromString("PageTemplatesXmlRenderer");
public static final ComponentId jsonRendererId = ComponentId.fromString("JsonRenderer");
- public static final ComponentId tokenRendererId = ComponentId.fromString("TokenRenderer");
+ public static final ComponentId eventRendererId = ComponentId.fromString("EventRenderer");
public static final ComponentId defaultRendererId = jsonRendererId;
@@ -57,10 +57,10 @@ public final class RendererRegistry extends ComponentRegistry<com.yahoo.processi
pageRenderer.initId(pageRendererId);
register(pageRenderer.getId(), pageRenderer);
- // Add token renderer
- Renderer tokenRenderer = new TokenRenderer(executor);
- tokenRenderer.initId(tokenRendererId);
- register(tokenRenderer.getId(), tokenRenderer);
+ // Add event renderer
+ Renderer eventRenderer = new EventRenderer(executor);
+ eventRenderer.initId(eventRendererId);
+ register(eventRenderer.getId(), eventRenderer);
// add application renderers
for (Renderer renderer : renderers)
@@ -75,7 +75,7 @@ public final class RendererRegistry extends ComponentRegistry<com.yahoo.processi
getRenderer(jsonRendererId.toSpecification()).deconstruct();
getRenderer(xmlRendererId.toSpecification()).deconstruct();
getRenderer(pageRendererId.toSpecification()).deconstruct();
- getRenderer(tokenRendererId.toSpecification()).deconstruct();
+ getRenderer(eventRendererId.toSpecification()).deconstruct();
}
/**
@@ -99,7 +99,7 @@ public final class RendererRegistry extends ComponentRegistry<com.yahoo.processi
if (format.stringValue().equals("json")) return getComponent(jsonRendererId);
if (format.stringValue().equals("xml")) return getComponent(xmlRendererId);
if (format.stringValue().equals("page")) return getComponent(pageRendererId);
- if (format.stringValue().equals("token")) return getComponent(tokenRendererId);
+ if (format.stringValue().equals("sse")) return getComponent(eventRendererId);
com.yahoo.processing.rendering.Renderer<Result> renderer = getComponent(format);
if (renderer == null)