( draftModel: string | undefined, lookahead: number, serverHint: SpecServerKind = 'auto', )
| 260 | export type SpecServerKind = 'lmstudio' | 'llamacpp' | 'vllm' | 'auto'; |
| 261 | |
| 262 | export function buildSpecDecodeExtras( |
| 263 | draftModel: string | undefined, |
| 264 | lookahead: number, |
| 265 | serverHint: SpecServerKind = 'auto', |
| 266 | ): Record<string, unknown> { |
| 267 | const extras: Record<string, unknown> = {}; |
| 268 | switch (serverHint) { |
| 269 | case 'lmstudio': |
| 270 | if (draftModel) extras.draft_model = draftModel; |
| 271 | break; |
| 272 | case 'llamacpp': |
| 273 | if (draftModel) extras.model_draft = draftModel; |
| 274 | extras.n_draft = lookahead; |
| 275 | break; |
| 276 | case 'vllm': |
| 277 | extras.num_speculative_tokens = lookahead; |
| 278 | break; |
| 279 | case 'auto': |
| 280 | default: |
| 281 | // Union of harmless fields — each server reads its own, ignores the rest. |
| 282 | if (draftModel) { |
| 283 | extras.draft_model = draftModel; // LM Studio |
| 284 | extras.model_draft = draftModel; // llama.cpp |
| 285 | } |
| 286 | extras.n_draft = lookahead; // llama.cpp |
| 287 | extras.num_speculative_tokens = lookahead; // vLLM |
| 288 | break; |
| 289 | } |
| 290 | return extras; |
| 291 | } |
no outgoing calls
no test coverage detected