11import { name as packageName , version as packageVersion } from "../../package.json" ;
22import { HF_HEADER_X_BILL_TO , HF_HUB_URL } from "../config" ;
33import type { InferenceTask , Options , RequestArgs } from "../types" ;
4- import { getProviderHelper } from "./getProviderHelper" ;
4+ import type { getProviderHelper } from "./getProviderHelper" ;
55import { getProviderModelId } from "./getProviderModelId" ;
66import { isUrl } from "./isUrl" ;
77
@@ -20,6 +20,7 @@ export async function makeRequestOptions(
2020 data ?: Blob | ArrayBuffer ;
2121 stream ?: boolean ;
2222 } ,
23+ providerHelper : ReturnType < typeof getProviderHelper > ,
2324 options ?: Options & {
2425 /** In most cases (unless we pass a endpointUrl) we know the task */
2526 task ?: InferenceTask ;
@@ -28,20 +29,26 @@ export async function makeRequestOptions(
2829 const { provider : maybeProvider , model : maybeModel } = args ;
2930 const provider = maybeProvider ?? "hf-inference" ;
3031 const { task } = options ?? { } ;
32+
3133 // Validate inputs
3234 if ( args . endpointUrl && provider !== "hf-inference" ) {
3335 throw new Error ( `Cannot use endpointUrl with a third-party provider.` ) ;
3436 }
3537 if ( maybeModel && isUrl ( maybeModel ) ) {
3638 throw new Error ( `Model URLs are no longer supported. Use endpointUrl instead.` ) ;
3739 }
40+
41+ if ( args . endpointUrl ) {
42+ // No need to have maybeModel, or to load default model for a task
43+ return makeRequestOptionsFromResolvedModel ( maybeModel ?? args . endpointUrl , providerHelper , args , options ) ;
44+ }
45+
3846 if ( ! maybeModel && ! task ) {
3947 throw new Error ( "No model provided, and no task has been specified." ) ;
4048 }
4149
4250 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
4351 const hfModel = maybeModel ?? ( await loadDefaultModel ( task ! ) ) ;
44- const providerHelper = getProviderHelper ( provider , task ) ;
4552
4653 if ( providerHelper . clientSideRoutingOnly && ! maybeModel ) {
4754 throw new Error ( `Provider ${ provider } requires a model ID to be passed directly.` ) ;
@@ -56,7 +63,7 @@ export async function makeRequestOptions(
5663 } ) ;
5764
5865 // Use the sync version with the resolved model
59- return makeRequestOptionsFromResolvedModel ( resolvedModel , args , options ) ;
66+ return makeRequestOptionsFromResolvedModel ( resolvedModel , providerHelper , args , options ) ;
6067}
6168
6269/**
@@ -65,6 +72,7 @@ export async function makeRequestOptions(
6572 */
6673export function makeRequestOptionsFromResolvedModel (
6774 resolvedModel : string ,
75+ providerHelper : ReturnType < typeof getProviderHelper > ,
6876 args : RequestArgs & {
6977 data ?: Blob | ArrayBuffer ;
7078 stream ?: boolean ;
@@ -79,7 +87,6 @@ export function makeRequestOptionsFromResolvedModel(
7987 const provider = maybeProvider ?? "hf-inference" ;
8088
8189 const { includeCredentials, task, signal, billTo } = options ?? { } ;
82- const providerHelper = getProviderHelper ( provider , task ) ;
8390 const authMethod = ( ( ) => {
8491 if ( providerHelper . clientSideRoutingOnly ) {
8592 // Closed-source providers require an accessToken (cannot be routed).
0 commit comments