import type { AnyObject } from '../_util/type';
import type { SSEOutput, XStreamOptions } from '../x-stream';
import type { XFetchMiddlewares, XFetchOptions } from './x-fetch';
type SimpleType = string | number | boolean | object;
/**
 * SDK-style callbacks (aligned with @ant-design/x-sdk).
 * Headers are optional for backward-friendly hosts.
 */
export interface ManualXRequestCallbacks<Output, ChatMessage extends SimpleType = any> {
    onSuccess: (chunks: Output[], responseHeaders: Headers, chatMessage?: any) => void;
    onError: (error: Error, errorInfo?: any, responseHeaders?: Headers, fallbackMsg?: any) => void | number;
    onUpdate?: (chunk: Output, responseHeaders: Headers, chatMessage?: any) => void;
}
export interface ManualXRequestOptions<Input = AnyObject, Output = SSEOutput, ChatMessage extends SimpleType = any> {
    callbacks?: ManualXRequestCallbacks<Output, ChatMessage>;
    params?: Partial<Input>;
    headers?: Record<string, string>;
    timeout?: number;
    streamTimeout?: number;
    fetch?: XFetchOptions['fetch'];
    middlewares?: XFetchMiddlewares;
    transformStream?: XStreamOptions<Output>['transformStream'];
    streamSeparator?: string;
    partSeparator?: string;
    kvSeparator?: string;
    /** Must be true for provider-owned requests */
    manual?: boolean;
    retryInterval?: number;
    retryTimes?: number;
    model?: string;
    dangerouslyApiKey?: string;
}
export declare abstract class AbstractXRequestClass<Input = AnyObject, Output = SSEOutput, ChatMessage extends SimpleType = any> {
    baseURL: string;
    options: ManualXRequestOptions<Input, Output, ChatMessage>;
    constructor(baseURL: string, options?: ManualXRequestOptions<Input, Output, ChatMessage>);
    abstract get asyncHandler(): Promise<any>;
    abstract get isTimeout(): boolean;
    abstract get isStreamTimeout(): boolean;
    abstract get isRequesting(): boolean;
    abstract get manual(): boolean;
    abstract run(params?: Input): boolean;
    abstract abort(): void;
}
/**
 * Manual XRequest instance for AbstractChatProvider (aligned with @ant-design/x-sdk XRequest(baseURL, { manual: true })).
 * Reuses the legacy Vue XRequest.create engine under the hood.
 */
export declare class ManualXRequestClass<Input = AnyObject, Output = SSEOutput, ChatMessage extends SimpleType = any> extends AbstractXRequestClass<Input, Output, ChatMessage> {
    private _asyncHandler;
    private _manual;
    private lastHeaders;
    private legacy;
    constructor(baseURL: string, options?: ManualXRequestOptions<Input, Output, ChatMessage>);
    get asyncHandler(): Promise<any>;
    get isTimeout(): boolean;
    get isStreamTimeout(): boolean;
    get isRequesting(): boolean;
    get manual(): boolean;
    run(params?: Input): boolean;
    abort(): void;
}
/**
 * Create a manual SDK-style XRequest (use with AbstractChatProvider).
 *
 * @example
 * ```ts
 * const request = createManualXRequest('/api/chat', { manual: true, params: { model: 'gpt-4o-mini' } });
 * const provider = new OpenAIChatProvider({ request });
 * ```
 */
export declare function createManualXRequest<Input = AnyObject, Output = SSEOutput, ChatMessage extends SimpleType = any>(baseURL: string, options?: ManualXRequestOptions<Input, Output, ChatMessage>): AbstractXRequestClass<Input, Output, ChatMessage>;
export default createManualXRequest;
