import type { Response } from "../../Response.js";
import type { ServiceContext } from "../../ServiceContext.js";
import { PromptMixin } from "../../prompts/Mixin.js";
import type { BaseSynthesizer } from "../../synthesizers/index.js";
import type { BaseTool, QueryEngine, QueryEngineParamsNonStreaming, QueryEngineParamsStreaming, ToolMetadata } from "../../types.js";
import type { BaseQuestionGenerator } from "./types.js";
/**
 * SubQuestionQueryEngine decomposes a question into subquestions and then
 */
export declare class SubQuestionQueryEngine extends PromptMixin implements QueryEngine {
    responseSynthesizer: BaseSynthesizer;
    questionGen: BaseQuestionGenerator;
    queryEngines: BaseTool[];
    metadatas: ToolMetadata[];
    constructor(init: {
        questionGen: BaseQuestionGenerator;
        responseSynthesizer: BaseSynthesizer;
        queryEngineTools: BaseTool[];
    });
    protected _getPromptModules(): Record<string, any>;
    static fromDefaults(init: {
        queryEngineTools: BaseTool[];
        questionGen?: BaseQuestionGenerator;
        responseSynthesizer?: BaseSynthesizer;
        serviceContext?: ServiceContext;
    }): SubQuestionQueryEngine;
    query(params: QueryEngineParamsStreaming): Promise<AsyncIterable<Response>>;
    query(params: QueryEngineParamsNonStreaming): Promise<Response>;
    private querySubQ;
}
