| |
| |
| |
|
|
| import type { AlgorithmId, Detection, GenerationResult, SamplingConfig, SentenceTrace } from '../watermark/types'; |
| import type { KirchenbauerParams } from '../watermark/kirchenbauer'; |
| import type { KsemstampParams } from '../watermark/ksemstamp'; |
| import type { TextsealParams } from '../watermark/textseal'; |
|
|
| export interface AlgorithmParams { |
| kirchenbauer: KirchenbauerParams; |
| ksemstamp: KsemstampParams; |
| textseal: TextsealParams; |
| } |
|
|
| |
| export interface NextTokenCandidate { |
| tokenId: number; |
| text: string; |
| logit: number; |
| prob: number; |
| } |
|
|
| export interface DistributionResult { |
| |
| prevTokenId: number; |
| prevTokenText: string; |
| |
| prevTokenIds: number[]; |
| vocabSize: number; |
| candidates: NextTokenCandidate[]; |
| } |
|
|
| |
| export type WorkerRequest = |
| | { type: 'check' } |
| | { type: 'load'; modelId: string } |
| | { type: 'distribution'; requestId: number; prompt: string; topN: number; temperature: number } |
| | { |
| type: 'generate'; |
| requestId: number; |
| algorithm: AlgorithmId; |
| prompt: string; |
| sampling: SamplingConfig; |
| params: AlgorithmParams; |
| |
| secretKey?: string; |
| } |
| | { |
| type: 'detect'; |
| requestId: number; |
| text: string; |
| sampling: SamplingConfig; |
| params: AlgorithmParams; |
| |
| keys?: { kirchenbauer?: string; ksemstamp?: string; textseal?: string }; |
| |
| withEntropy?: boolean; |
| }; |
|
|
| export interface DeviceInfo { |
| webgpuSupported: boolean; |
| shaderF16: boolean; |
| device: 'webgpu' | 'wasm'; |
| dtype: string; |
| adapterInfo?: { vendor?: string; architecture?: string }; |
| } |
|
|
| export interface DetectionBundle { |
| kirchenbauer: Detection; |
| textseal: Detection; |
| ksemstamp: Detection | null; |
| } |
|
|
| |
| export type WorkerResponse = |
| | { type: 'check-result'; info: DeviceInfo } |
| | { type: 'load-progress'; file: string; progress: number; loadedMB: number; totalMB: number } |
| | { type: 'load-done'; modelId: string; initMs: number; info: DeviceInfo } |
| | { type: 'load-error'; error: string } |
| | { type: 'distribution-done'; requestId: number; result: DistributionResult } |
| | { type: 'distribution-error'; requestId: number; error: string } |
| | { |
| type: 'generate-progress'; |
| requestId: number; |
| algorithm: AlgorithmId; |
| text: string; |
| tokensDone: number; |
| retries: number; |
| } |
| |
| |
| |
| |
| |
| | { |
| type: 'token'; |
| requestId: number; |
| algorithm: AlgorithmId; |
| index: number; |
| text: string; |
| |
| green?: boolean; |
| |
| keyId?: 1 | 2; |
| entropy?: number; |
| } |
| |
| | { type: 'candidate'; requestId: number; algorithm: AlgorithmId; sentence: SentenceTrace } |
| | { type: 'generate-done'; requestId: number; result: GenerationResult } |
| | { type: 'generate-error'; requestId: number; algorithm: AlgorithmId; error: string } |
| | { type: 'detect-done'; requestId: number; detections: DetectionBundle } |
| | { type: 'detect-error'; requestId: number; error: string }; |
|
|