infon-heads / js /src /types.ts
cp500's picture
Upload js/src/types.ts with huggingface_hub
398512a verified
Raw
History Blame Contribute Delete
3.22 kB
/**
* Public type surface for @cp500/infon-heads.
*
* The classifier outputs are denormalized — every field is present
* for every input — so downstream code can branch on the labels
* without null-checking. Sentences with no detectable signal for a
* given head still get the head's "none"/"no" class, never `null`.
*/
/** A wordpiece token with char-level alignment back into source text.
* Surfaced from the tokenizer; not part of the classifier output but
* exported for downstream callers that want to highlight tokens. */
export interface Token {
/** Token-vocabulary id. */
id: number;
/** Decoded string for this token. */
text: string;
/** Inclusive char offset where this token starts. */
start: number;
/** Exclusive char offset where this token ends. */
end: number;
}
/** All six classifier outputs for one sentence. */
export interface ClassifyResult {
/** Original sentence, unchanged. */
text: string;
/** Affirmed / negated / uncertain assertion stance. */
polarity: 'affirmed' | 'negated' | 'uncertain';
/** Past / present / future / conditional tense. */
tense: 'past' | 'present' | 'future' | 'conditional';
/** Whether this sentence is a conditional clause. */
conditional: boolean;
/** Causal / temporal / spatial / attributive / none relation. */
relationType:
| 'causal'
| 'temporal'
| 'spatial'
| 'attributive'
| 'none';
/** Spatial-relation kind (independent of ``relationType``). */
spatialRelation:
| 'containment'
| 'proximity'
| 'direction'
| 'movement'
| 'none';
/** Increase / decrease / stable / target / none — change semantics
* that pair with numeric quantities. */
comparativeDirection:
| 'increase'
| 'decrease'
| 'stable'
| 'target'
| 'none';
/** Per-head softmax probability of the chosen class. Useful for
* downstream callers that want to threshold low-confidence
* classifications. */
confidence: {
polarity: number;
tense: number;
conditional: number;
relationType: number;
spatialRelation: number;
comparativeDirection: number;
};
/** Per-stage timing in milliseconds. */
timing: {
tokenize: number;
backbone: number;
heads: number;
total: number;
};
}
/** Quantization variant + execution device. */
export interface ModelOptions {
/** ``'fp16'`` halves the download. ``'fp32'`` is safer for
* debugging.
* @default 'fp16' */
precision?: 'fp32' | 'fp16';
/** Execution provider for ORT.
* @default 'auto' */
device?: 'auto' | 'webgpu' | 'wasm' | 'cpu' | 'cuda';
/** Hard cap on input wordpieces; longer inputs get truncated.
* Heads operate on single sentences so 96 is plenty.
* @default 96 */
maxLength?: number;
/** Print timing + per-stage shapes to ``console.debug``.
* @default false */
debug?: boolean;
}
/** Loaded ONNX session pair + tokenizer + metadata. */
export interface LoadedModel {
backbone: import('./ort.js').OrtSession;
classifier: import('./ort.js').OrtSession;
tokenizer: import('./tokenizer.js').Tokenizer;
meta: {
hiddenSize: number;
maxLength: number;
precision: 'fp32' | 'fp16';
device: string;
};
}