|
|
import type { TextGenerationInput } from "@huggingface/tasks"; |
|
|
import { resolveProvider } from "../../lib/getInferenceProviderMapping.js"; |
|
|
import { getProviderHelper } from "../../lib/getProviderHelper.js"; |
|
|
import type { BaseArgs, Options } from "../../types.js"; |
|
|
import { innerStreamingRequest } from "../../utils/request.js"; |
|
|
|
|
|
export interface TextGenerationStreamToken { |
|
|
|
|
|
id: number; |
|
|
|
|
|
text: string; |
|
|
|
|
|
logprob: number; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
special: boolean; |
|
|
} |
|
|
|
|
|
export interface TextGenerationStreamPrefillToken { |
|
|
|
|
|
id: number; |
|
|
|
|
|
text: string; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logprob?: number; |
|
|
} |
|
|
|
|
|
export interface TextGenerationStreamBestOfSequence { |
|
|
|
|
|
generated_text: string; |
|
|
|
|
|
finish_reason: TextGenerationStreamFinishReason; |
|
|
|
|
|
generated_tokens: number; |
|
|
|
|
|
seed?: number; |
|
|
|
|
|
prefill: TextGenerationStreamPrefillToken[]; |
|
|
|
|
|
tokens: TextGenerationStreamToken[]; |
|
|
} |
|
|
|
|
|
export type TextGenerationStreamFinishReason = |
|
|
|
|
|
| "length" |
|
|
|
|
|
| "eos_token" |
|
|
|
|
|
| "stop_sequence"; |
|
|
|
|
|
export interface TextGenerationStreamDetails { |
|
|
|
|
|
finish_reason: TextGenerationStreamFinishReason; |
|
|
|
|
|
generated_tokens: number; |
|
|
|
|
|
seed?: number; |
|
|
|
|
|
prefill: TextGenerationStreamPrefillToken[]; |
|
|
|
|
|
tokens: TextGenerationStreamToken[]; |
|
|
|
|
|
best_of_sequences?: TextGenerationStreamBestOfSequence[]; |
|
|
} |
|
|
|
|
|
export interface TextGenerationStreamOutput { |
|
|
index?: number; |
|
|
|
|
|
token: TextGenerationStreamToken; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
generated_text: string | null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
details: TextGenerationStreamDetails | null; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export async function* textGenerationStream( |
|
|
args: BaseArgs & TextGenerationInput, |
|
|
options?: Options |
|
|
): AsyncGenerator<TextGenerationStreamOutput> { |
|
|
const provider = await resolveProvider(args.provider, args.model, args.endpointUrl); |
|
|
const providerHelper = getProviderHelper(provider, "text-generation"); |
|
|
yield* innerStreamingRequest<TextGenerationStreamOutput>(args, providerHelper, { |
|
|
...options, |
|
|
task: "text-generation", |
|
|
}); |
|
|
} |
|
|
|