diff --git a/packages/core/src/QueryEngine.ts b/packages/core/src/QueryEngine.ts
index 8ea7378b35d9c6be6c18df4c88a9becc2bbc0c5d..e574c6cf5e110b8e8ac3228d890da05cee050e0b 100644
--- a/packages/core/src/QueryEngine.ts
+++ b/packages/core/src/QueryEngine.ts
@@ -26,11 +26,15 @@ export class RetrieverQueryEngine implements BaseQueryEngine {
   retriever: BaseRetriever;
   responseSynthesizer: ResponseSynthesizer;
 
-  constructor(retriever: BaseRetriever) {
+  constructor(
+    retriever: BaseRetriever,
+    responseSynthesizer?: ResponseSynthesizer
+  ) {
     this.retriever = retriever;
     const serviceContext: ServiceContext | undefined =
       this.retriever.getServiceContext();
-    this.responseSynthesizer = new ResponseSynthesizer({ serviceContext });
+    this.responseSynthesizer =
+      responseSynthesizer || new ResponseSynthesizer({ serviceContext });
   }
 
   async aquery(query: string, parentEvent?: Event) {
diff --git a/packages/core/src/index/list/ListIndex.ts b/packages/core/src/index/list/ListIndex.ts
index 422236c644f731bddfca79a6e9469a0a5eaa873e..54bd62e62c2c51072fec069f527c1bc993dffc24 100644
--- a/packages/core/src/index/list/ListIndex.ts
+++ b/packages/core/src/index/list/ListIndex.ts
@@ -16,6 +16,10 @@ import {
 } from "../../ServiceContext";
 import { BaseDocumentStore, RefDocInfo } from "../../storage/docStore/types";
 import _ from "lodash";
+import {
+  ResponseSynthesizer,
+  CompactAndRefine,
+} from "../../ResponseSynthesizer";
 
 export enum ListRetrieverMode {
   DEFAULT = "default",
@@ -112,9 +116,20 @@ export class ListIndex extends BaseIndex<IndexList> {
   }
 
   asQueryEngine(
-    mode: ListRetrieverMode = ListRetrieverMode.DEFAULT
+    mode: ListRetrieverMode = ListRetrieverMode.DEFAULT,
+    responseSynthesizer?: ResponseSynthesizer
   ): BaseQueryEngine {
-    return new RetrieverQueryEngine(this.asRetriever(mode));
+    if (_.isNil(responseSynthesizer)) {
+      let responseBuilder = new CompactAndRefine(this.serviceContext);
+      responseSynthesizer = new ResponseSynthesizer({
+        serviceContext: this.serviceContext,
+        responseBuilder,
+      });
+    }
+    return new RetrieverQueryEngine(
+      this.asRetriever(mode),
+      responseSynthesizer
+    );
   }
 
   static async _buildIndexFromNodes(