@hashbrownai/core
Version:
Runtime helpers for Hashbrown AI
112 lines • 3.99 kB
TypeScript
import { type Transport, type TransportFactory, type TransportRequest, type TransportResponse } from './transport';
import { type DetectionResult, type ModelSpecFactory } from './model-spec';
export type SupportedOutputLanguage = 'en' | 'es' | 'ja';
/**
* Message format accepted by the Chrome Prompt API.
* @alpha
*/
export interface PromptMessage {
role: 'system' | 'user' | 'assistant';
content: string;
}
/**
* Prompt options for the Chrome Prompt API.
* @alpha
*/
export interface PromptOptions {
responseConstraint?: unknown;
temperature?: number;
topK?: number;
signal?: AbortSignal;
outputLanguage?: SupportedOutputLanguage;
tools?: never;
}
/**
* Request shape passed to the Chrome Prompt API.
* @alpha
*/
export interface PromptRequest {
messages: PromptMessage[] | string;
options?: PromptOptions;
sessionOptions?: LanguageModelCreateOptions;
}
/**
* Configuration for the experimental Chrome local transport.
* @alpha
*/
export interface ExperimentalChromeLocalTransportOptions {
transformRequest?: (request: TransportRequest) => PromptRequest;
events?: {
downloadRequired?: (status: LanguageModelAvailabilityStatus) => Promise<void> | void;
downloadProgress?: (percent: number) => void;
availability?: (status: LanguageModelAvailabilityStatus) => void;
sessionState?: (state: 'created' | 'destroyed' | 'error') => void;
};
createSession?: () => Promise<LanguageModelSession>;
outputLanguage?: SupportedOutputLanguage;
}
type LanguageModelAvailabilityStatus = 'unavailable' | 'available' | 'downloadable' | 'downloading';
interface LanguageModelCreateOptions {
signal?: AbortSignal;
monitor?: (event: DownloadProgressEvent) => void;
expectedOutputs?: ExpectedOutput[];
[key: string]: unknown;
}
interface ExpectedOutput {
type: string;
languages?: SupportedOutputLanguage[];
}
interface LanguageModelSession {
prompt(input: PromptMessage[] | string, options?: PromptOptions): Promise<string>;
promptStreaming(input: PromptMessage[] | string, options?: PromptOptions): Promise<ReadableStream<string>>;
destroy?: () => void;
}
/**
* Experimental transport that targets the Chrome Prompt API.
* @alpha
*/
export declare class ExperimentalChromeLocalTransport implements Transport {
private readonly options;
readonly name = "ExperimentalChromeLocalTransport";
private sessionPromise?;
constructor(options: ExperimentalChromeLocalTransportOptions);
send(request: TransportRequest): Promise<TransportResponse>;
destroy(): Promise<void>;
private getLanguageModel;
private ensureAvailability;
private getSession;
private createLanguageModelSession;
private createFrameGenerator;
private streamPromptToFrames;
private readStream;
}
/**
* Factory for the experimental Chrome local transport.
* @alpha
*/
export declare function createExperimentalChromeLocalTransport(options?: ExperimentalChromeLocalTransportOptions): TransportFactory;
/**
* Detects whether the Chrome Prompt API is available.
* @alpha
*/
export declare function detectChromePromptApi(sessionOptions?: LanguageModelCreateOptions, opts?: {
outputLanguage?: SupportedOutputLanguage;
onAvailabilityChange?: (status: LanguageModelAvailabilityStatus) => void;
}): Promise<DetectionResult>;
/**
* Model spec factory for Chrome Prompt API transport.
* @alpha
*/
export declare function experimentalChromeLocalModelSpec(userOptions?: ExperimentalChromeLocalTransportOptions): ModelSpecFactory;
/**
* Preferred snake_case helper name for consistency with other transport helpers.
* Kept alongside the legacy `experimentalChromeLocalModelSpec`.
* @alpha
*/
export declare const experimental_chrome: typeof experimentalChromeLocalModelSpec;
interface DownloadProgressEvent extends Event {
loaded?: number;
total?: number;
}
export {};
//# sourceMappingURL=experimental-chrome-local-transport.d.ts.map