Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -293,32 +293,65 @@ private static String streamEventDocumentation() {
return "Events are polymorphic: see {@link KnowledgeBaseRetrievalStreamEvent} for the known subtypes. "
+ "Use a known subtype's {@code getValue()} to access its typed payload, for example "
+ "{@link com.azure.search.documents.knowledgebases.models.KnowledgeBaseAnswerCompletedStreamEvent"
+ "#getValue()}. "
+ "Unrecognized events expose only their names through "
+ "#getValue()}. " + "Unrecognized events expose only their names through "
+ "{@link KnowledgeBaseRetrievalStreamEvent#getEventName()}; their payloads are not available.\n\n";
}

private static String baseEventSource() {
return header("com.azure.search.documents.knowledgebases.models")
+ "import com.azure.core.annotation.Generated;\n\n" + "/**\n"
+ " * Abstract base for polymorphic events emitted by a streaming knowledge base retrieval.\n"
+ "import com.azure.core.annotation.Generated;\n"
+ "import com.azure.search.documents.knowledgebases.implementation."
+ "KnowledgeBaseRetrievalStreamEventConverter;\n" + "import java.util.List;\n\n" + "/**\n"
+ " * Base for polymorphic events emitted by a streaming knowledge base retrieval.\n"
+ " * Known events expose typed payloads through their subtype's {@code getValue()} method.\n"
+ " * Unrecognized events expose only their names through {@link #getEventName()}; "
+ "their payloads are not available.\n"
+ " * Unrecognized events expose only their names through\n"
+ " * {@link #getEventName()}; their payloads are not available and they are not terminal.\n"
+ " * Stream events are envelopes, not JSON payload models; serialize the typed payload instead.\n" + " *\n"
+ " * @see KnowledgeBaseRetrievalStartedStreamEvent\n" + " * @see KnowledgeBaseActivityStartedStreamEvent\n"
+ " * @see KnowledgeBaseActivityCompletedStreamEvent\n"
+ " * @see KnowledgeBaseAnswerCompletedStreamEvent\n"
+ " * @see KnowledgeBaseReferencesCompletedStreamEvent\n" + " * @see KnowledgeBaseErrorStreamEvent\n"
+ " * @see KnowledgeBaseResponseCompletedStreamEvent\n" + " */\n"
+ "public abstract class KnowledgeBaseRetrievalStreamEvent {\n" + " @Generated\n"
+ "public abstract class KnowledgeBaseRetrievalStreamEvent {\n" + " static {\n"
+ " KnowledgeBaseRetrievalStreamEventConverter.setConstructorAccessor(\n"
+ " new KnowledgeBaseRetrievalStreamEventConverter.ConstructorAccessor() {\n"
+ " @Override\n"
+ " public KnowledgeBaseRetrievalStreamEvent createEvent(String eventName) {\n"
+ " return new KnowledgeBaseRetrievalStreamEvent(eventName) { };\n"
+ " }\n\n" + " @Override\n"
+ " public KnowledgeBaseRetrievalStartedStreamEvent createRetrievalStarted(\n"
+ " KnowledgeBaseRetrievalStartedEvent value) {\n"
+ " return new KnowledgeBaseRetrievalStartedStreamEvent(value);\n"
+ " }\n\n" + " @Override\n"
+ " public KnowledgeBaseActivityStartedStreamEvent createActivityStarted(\n"
+ " KnowledgeBaseActivityStartedEvent value) {\n"
+ " return new KnowledgeBaseActivityStartedStreamEvent(value);\n"
+ " }\n\n" + " @Override\n"
+ " public KnowledgeBaseActivityCompletedStreamEvent createActivityCompleted(\n"
+ " KnowledgeBaseActivityRecord value) {\n"
+ " return new KnowledgeBaseActivityCompletedStreamEvent(value);\n"
+ " }\n\n" + " @Override\n"
+ " public KnowledgeBaseAnswerCompletedStreamEvent createAnswerCompleted(\n"
+ " KnowledgeBaseAnswerCompletedEvent value) {\n"
+ " return new KnowledgeBaseAnswerCompletedStreamEvent(value);\n"
+ " }\n\n" + " @Override\n"
+ " public KnowledgeBaseReferencesCompletedStreamEvent createReferencesCompleted(\n"
+ " List<KnowledgeBaseReference> value) {\n"
+ " return new KnowledgeBaseReferencesCompletedStreamEvent(value);\n"
+ " }\n\n" + " @Override\n"
+ " public KnowledgeBaseErrorStreamEvent createError(KnowledgeBaseStreamErrorEvent value) {\n"
+ " return new KnowledgeBaseErrorStreamEvent(value);\n" + " }\n\n"
+ " @Override\n"
+ " public KnowledgeBaseResponseCompletedStreamEvent createResponseCompleted(\n"
+ " KnowledgeBaseResponseCompletedEvent value) {\n"
+ " return new KnowledgeBaseResponseCompletedStreamEvent(value);\n"
+ " }\n" + " });\n" + " }\n\n" + " @Generated\n"
+ " private final String eventName;\n\n" + " /**\n" + " * Creates a stream event.\n" + " *\n"
+ " * @param eventName The server-sent event name.\n" + " */\n" + " @Generated\n"
+ " protected KnowledgeBaseRetrievalStreamEvent(String eventName) {\n"
+ " this.eventName = eventName;\n" + " }\n\n" + " /**\n"
+ " * Gets the server-sent event name.\n" + " *\n" + " * @return The event name.\n"
+ " */\n" + " @Generated\n" + " public final String getEventName() {\n"
+ " return eventName;\n" + " }\n\n" + " /**\n"
+ " KnowledgeBaseRetrievalStreamEvent(String eventName) {\n" + " this.eventName = eventName;\n"
+ " }\n\n" + " /**\n" + " * Gets the server-sent event name.\n" + " *\n"
+ " * @return The event name.\n" + " */\n" + " @Generated\n"
+ " public final String getEventName() {\n" + " return eventName;\n" + " }\n\n" + " /**\n"
+ " * Gets whether this event terminates the retrieval stream.\n" + " *\n"
+ " * @return {@code true} if this is a terminal event; otherwise {@code false}.\n" + " */\n"
+ " @Generated\n" + " public boolean isTerminal() {\n" + " return false;\n" + " }\n"
Expand All @@ -341,11 +374,11 @@ private static String wrapperSource(String className, String payloadType, String
+ " *\n" + " * @see KnowledgeBaseRetrievalStreamEvent\n" + " */\n" + "@Immutable\n" + "public final class "
+ className + " extends KnowledgeBaseRetrievalStreamEvent {\n" + " @Generated\n" + " private final "
+ valueType + " value;\n\n" + " /**\n" + " * Creates an event wrapper.\n" + " *\n"
+ " * @param value The event payload.\n" + " */\n" + " @Generated\n" + " public " + className
+ "(" + valueType + " value) {\n" + " super(\"" + eventName + "\");\n"
+ " this.value = value;\n" + " }\n\n" + " /**\n" + " * Gets the event payload.\n"
+ " *\n" + " * @return The event payload.\n" + " */\n" + " @Generated\n" + " public "
+ valueType + " getValue() {\n" + " return value;\n" + " }\n" + terminalOverride + "}\n";
+ " * @param value The event payload.\n" + " */\n" + " @Generated\n" + " " + className + "("
+ valueType + " value) {\n" + " super(\"" + eventName + "\");\n" + " this.value = value;\n"
+ " }\n\n" + " /**\n" + " * Gets the event payload.\n" + " *\n"
+ " * @return The event payload.\n" + " */\n" + " @Generated\n" + " public " + valueType
+ " getValue() {\n" + " return value;\n" + " }\n" + terminalOverride + "}\n";
}

private static String header(String packageName) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) TypeSpec Code Generator.

package com.azure.search.documents.indexes.models;

import com.azure.core.annotation.Generated;
Expand All @@ -17,6 +16,7 @@
*/
@Immutable
public final class KnowledgeSourceFileCapacity implements JsonSerializable<KnowledgeSourceFileCapacity> {

/*
* The maximum number of files allowed in the knowledge source.
*/
Expand Down Expand Up @@ -44,7 +44,7 @@ private KnowledgeSourceFileCapacity() {

/**
* Get the maxFileCount property: The maximum number of files allowed in the knowledge source.
*
*
* @return the maxFileCount value.
*/
@Generated
Expand All @@ -55,7 +55,7 @@ public int getMaxFileCount() {
/**
* Get the remainingFileCount property: The number of additional files that can be uploaded at the time of the
* request.
*
*
* @return the remainingFileCount value.
*/
@Generated
Expand All @@ -65,7 +65,7 @@ public int getRemainingFileCount() {

/**
* Get the maxFileSizeBytes property: The maximum size in bytes of an individual uploaded file.
*
*
* @return the maxFileSizeBytes value.
*/
@Generated
Expand All @@ -85,7 +85,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {

/**
* Reads an instance of KnowledgeSourceFileCapacity from the JsonReader.
*
*
* @param jsonReader The JsonReader being read.
* @return An instance of KnowledgeSourceFileCapacity if the JsonReader was pointing to an instance of it, or null
* if it was pointing to JSON null.
Expand All @@ -99,7 +99,6 @@ public static KnowledgeSourceFileCapacity fromJson(JsonReader jsonReader) throws
while (reader.nextToken() != JsonToken.END_OBJECT) {
String fieldName = reader.getFieldName();
reader.nextToken();

if ("maxFileCount".equals(fieldName)) {
deserializedKnowledgeSourceFileCapacity.maxFileCount = reader.getInt();
} else if ("remainingFileCount".equals(fieldName)) {
Expand All @@ -110,7 +109,6 @@ public static KnowledgeSourceFileCapacity fromJson(JsonReader jsonReader) throws
reader.skipChildren();
}
}

return deserializedKnowledgeSourceFileCapacity;
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

package com.azure.search.documents.knowledgebases.implementation;

import com.azure.core.util.logging.ClientLogger;
import com.azure.json.JsonProviders;
import com.azure.json.JsonReader;
import com.azure.json.ReadValueCallback;
Expand All @@ -23,14 +24,116 @@
import com.azure.search.documents.knowledgebases.models.KnowledgeBaseStreamErrorEvent;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.List;
import java.util.Objects;

/**
* Converts knowledge base retrieval stream event payloads to typed event models.
*/
public final class KnowledgeBaseRetrievalStreamEventConverter {
private static final ClientLogger LOGGER = new ClientLogger(KnowledgeBaseRetrievalStreamEventConverter.class);
private static volatile ConstructorAccessor constructorAccessor;

private KnowledgeBaseRetrievalStreamEventConverter() {
}

/**
* Provides access to the SDK-only event constructors.
*/
public interface ConstructorAccessor {
/**
* Creates a name-only event.
*
* @param eventName The event name.
* @return The event.
*/
KnowledgeBaseRetrievalStreamEvent createEvent(String eventName);

/**
* Creates a retrieval-started event.
*
* @param value The decoded payload.
* @return The event.
*/
KnowledgeBaseRetrievalStartedStreamEvent createRetrievalStarted(KnowledgeBaseRetrievalStartedEvent value);

/**
* Creates an activity-started event.
*
* @param value The decoded payload.
* @return The event.
*/
KnowledgeBaseActivityStartedStreamEvent createActivityStarted(KnowledgeBaseActivityStartedEvent value);

/**
* Creates an activity-completed event.
*
* @param value The decoded payload.
* @return The event.
*/
KnowledgeBaseActivityCompletedStreamEvent createActivityCompleted(KnowledgeBaseActivityRecord value);

/**
* Creates an answer-completed event.
*
* @param value The decoded payload.
* @return The event.
*/
KnowledgeBaseAnswerCompletedStreamEvent createAnswerCompleted(KnowledgeBaseAnswerCompletedEvent value);

/**
* Creates a references-completed event.
*
* @param value The decoded payload.
* @return The event.
*/
KnowledgeBaseReferencesCompletedStreamEvent createReferencesCompleted(List<KnowledgeBaseReference> value);

/**
* Creates an error event.
*
* @param value The decoded payload.
* @return The event.
*/
KnowledgeBaseErrorStreamEvent createError(KnowledgeBaseStreamErrorEvent value);

/**
* Creates a response-completed event.
*
* @param value The decoded payload.
* @return The event.
*/
KnowledgeBaseResponseCompletedStreamEvent createResponseCompleted(KnowledgeBaseResponseCompletedEvent value);
}

/**
* Registers the event constructors from the models package.
*
* @param accessor The constructor accessor.
*/
public static void setConstructorAccessor(ConstructorAccessor accessor) {
constructorAccessor = Objects.requireNonNull(accessor, "'accessor' cannot be null.");
}

private static ConstructorAccessor getConstructorAccessor() {
ConstructorAccessor accessor = constructorAccessor;
if (accessor == null) {
try {
Class.forName(KnowledgeBaseRetrievalStreamEvent.class.getName(), true,
KnowledgeBaseRetrievalStreamEvent.class.getClassLoader());
} catch (ClassNotFoundException | LinkageError exception) {
throw LOGGER.logExceptionAsError(new IllegalStateException(
"Failed to initialize knowledge base retrieval stream event constructors.", exception));
}
accessor = constructorAccessor;
if (accessor == null) {
throw LOGGER.logExceptionAsError(new IllegalStateException(
"Knowledge base retrieval stream event constructors were not registered."));
}
}
return accessor;
}

/**
* Converts a stream event payload.
*
Expand All @@ -39,37 +142,36 @@ private KnowledgeBaseRetrievalStreamEventConverter() {
* @return The typed stream event.
*/
public static KnowledgeBaseRetrievalStreamEvent convert(String eventName, String data) {
ConstructorAccessor accessor = getConstructorAccessor();
switch (eventName) {
case "retrieval.started":
return new KnowledgeBaseRetrievalStartedStreamEvent(
read(eventName, data, KnowledgeBaseRetrievalStartedEvent::fromJson));
return accessor
.createRetrievalStarted(read(eventName, data, KnowledgeBaseRetrievalStartedEvent::fromJson));

case "activity.started":
return new KnowledgeBaseActivityStartedStreamEvent(
read(eventName, data, KnowledgeBaseActivityStartedEvent::fromJson));
return accessor
.createActivityStarted(read(eventName, data, KnowledgeBaseActivityStartedEvent::fromJson));

case "activity.completed":
return new KnowledgeBaseActivityCompletedStreamEvent(
read(eventName, data, KnowledgeBaseActivityRecord::fromJson));
return accessor.createActivityCompleted(read(eventName, data, KnowledgeBaseActivityRecord::fromJson));

case "answer.completed":
return new KnowledgeBaseAnswerCompletedStreamEvent(
read(eventName, data, KnowledgeBaseAnswerCompletedEvent::fromJson));
return accessor
.createAnswerCompleted(read(eventName, data, KnowledgeBaseAnswerCompletedEvent::fromJson));

case "references.completed":
return new KnowledgeBaseReferencesCompletedStreamEvent(
return accessor.createReferencesCompleted(
read(eventName, data, reader -> reader.readArray(KnowledgeBaseReference::fromJson)));

case "error":
return new KnowledgeBaseErrorStreamEvent(
read(eventName, data, KnowledgeBaseStreamErrorEvent::fromJson));
return accessor.createError(read(eventName, data, KnowledgeBaseStreamErrorEvent::fromJson));

case "response.completed":
return new KnowledgeBaseResponseCompletedStreamEvent(
read(eventName, data, KnowledgeBaseResponseCompletedEvent::fromJson));
return accessor
.createResponseCompleted(read(eventName, data, KnowledgeBaseResponseCompletedEvent::fromJson));

default:
return new UnrecognizedStreamEvent(eventName);
return accessor.createEvent(eventName);
}
}

Expand All @@ -80,12 +182,6 @@ private static <T> T read(String eventName, String data, ReadValueCallback<JsonR
throw new UncheckedIOException("Failed to decode knowledge base retrieval stream event: " + eventName,
exception);
}

}

private static final class UnrecognizedStreamEvent extends KnowledgeBaseRetrievalStreamEvent {
private UnrecognizedStreamEvent(String eventName) {
super(eventName);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public final class KnowledgeBaseActivityCompletedStreamEvent extends KnowledgeBa
* @param value The event payload.
*/
@Generated
public KnowledgeBaseActivityCompletedStreamEvent(KnowledgeBaseActivityRecord value) {
KnowledgeBaseActivityCompletedStreamEvent(KnowledgeBaseActivityRecord value) {
super("activity.completed");
this.value = value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public final class KnowledgeBaseActivityStartedStreamEvent extends KnowledgeBase
* @param value The event payload.
*/
@Generated
public KnowledgeBaseActivityStartedStreamEvent(KnowledgeBaseActivityStartedEvent value) {
KnowledgeBaseActivityStartedStreamEvent(KnowledgeBaseActivityStartedEvent value) {
super("activity.started");
this.value = value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public final class KnowledgeBaseAnswerCompletedStreamEvent extends KnowledgeBase
* @param value The event payload.
*/
@Generated
public KnowledgeBaseAnswerCompletedStreamEvent(KnowledgeBaseAnswerCompletedEvent value) {
KnowledgeBaseAnswerCompletedStreamEvent(KnowledgeBaseAnswerCompletedEvent value) {
super("answer.completed");
this.value = value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public final class KnowledgeBaseErrorStreamEvent extends KnowledgeBaseRetrievalS
* @param value The event payload.
*/
@Generated
public KnowledgeBaseErrorStreamEvent(KnowledgeBaseStreamErrorEvent value) {
KnowledgeBaseErrorStreamEvent(KnowledgeBaseStreamErrorEvent value) {
super("error");
this.value = value;
}
Expand Down
Loading
Loading