@huggingface/inference 3.14.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +104 -1
- package/dist/commonjs/errors.d.ts +46 -0
- package/dist/commonjs/errors.d.ts.map +1 -0
- package/dist/commonjs/errors.js +70 -0
- package/dist/commonjs/index.d.ts +1 -1
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +2 -3
- package/dist/commonjs/lib/getInferenceProviderMapping.d.ts.map +1 -1
- package/dist/commonjs/lib/getInferenceProviderMapping.js +27 -16
- package/dist/commonjs/lib/getProviderHelper.d.ts.map +1 -1
- package/dist/commonjs/lib/getProviderHelper.js +5 -3
- package/dist/commonjs/lib/makeRequestOptions.d.ts.map +1 -1
- package/dist/commonjs/lib/makeRequestOptions.js +12 -11
- package/dist/commonjs/package.d.ts +1 -1
- package/dist/commonjs/package.d.ts.map +1 -1
- package/dist/commonjs/package.js +1 -1
- package/dist/commonjs/providers/black-forest-labs.d.ts.map +1 -1
- package/dist/commonjs/providers/black-forest-labs.js +4 -4
- package/dist/commonjs/providers/fal-ai.d.ts.map +1 -1
- package/dist/commonjs/providers/fal-ai.js +29 -17
- package/dist/commonjs/providers/featherless-ai.d.ts.map +1 -1
- package/dist/commonjs/providers/featherless-ai.js +10 -4
- package/dist/commonjs/providers/hf-inference.d.ts.map +1 -1
- package/dist/commonjs/providers/hf-inference.js +27 -30
- package/dist/commonjs/providers/hyperbolic.d.ts.map +1 -1
- package/dist/commonjs/providers/hyperbolic.js +3 -3
- package/dist/commonjs/providers/nebius.d.ts.map +1 -1
- package/dist/commonjs/providers/nebius.js +2 -2
- package/dist/commonjs/providers/novita.d.ts +5 -6
- package/dist/commonjs/providers/novita.d.ts.map +1 -1
- package/dist/commonjs/providers/novita.js +66 -16
- package/dist/commonjs/providers/nscale.d.ts.map +1 -1
- package/dist/commonjs/providers/nscale.js +2 -2
- package/dist/commonjs/providers/ovhcloud.d.ts.map +1 -1
- package/dist/commonjs/providers/ovhcloud.js +2 -2
- package/dist/commonjs/providers/providerHelper.js +3 -3
- package/dist/commonjs/providers/replicate.js +4 -4
- package/dist/commonjs/providers/sambanova.d.ts +16 -0
- package/dist/commonjs/providers/sambanova.d.ts.map +1 -1
- package/dist/commonjs/providers/sambanova.js +2 -18
- package/dist/commonjs/providers/together.d.ts.map +1 -1
- package/dist/commonjs/providers/together.js +3 -3
- package/dist/commonjs/tasks/audio/automaticSpeechRecognition.d.ts.map +1 -1
- package/dist/commonjs/tasks/audio/automaticSpeechRecognition.js +2 -2
- package/dist/commonjs/utils/request.d.ts.map +1 -1
- package/dist/commonjs/utils/request.js +77 -12
- package/dist/commonjs/vendor/type-fest/basic.d.ts +33 -0
- package/dist/commonjs/vendor/type-fest/basic.d.ts.map +1 -0
- package/dist/commonjs/vendor/type-fest/basic.js +2 -0
- package/dist/esm/errors.d.ts +46 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +62 -0
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/getInferenceProviderMapping.d.ts.map +1 -1
- package/dist/esm/lib/getInferenceProviderMapping.js +27 -16
- package/dist/esm/lib/getProviderHelper.d.ts.map +1 -1
- package/dist/esm/lib/getProviderHelper.js +5 -3
- package/dist/esm/lib/makeRequestOptions.d.ts.map +1 -1
- package/dist/esm/lib/makeRequestOptions.js +12 -11
- package/dist/esm/package.d.ts +1 -1
- package/dist/esm/package.d.ts.map +1 -1
- package/dist/esm/package.js +1 -1
- package/dist/esm/providers/black-forest-labs.d.ts.map +1 -1
- package/dist/esm/providers/black-forest-labs.js +4 -4
- package/dist/esm/providers/fal-ai.d.ts.map +1 -1
- package/dist/esm/providers/fal-ai.js +29 -17
- package/dist/esm/providers/featherless-ai.d.ts.map +1 -1
- package/dist/esm/providers/featherless-ai.js +10 -4
- package/dist/esm/providers/hf-inference.d.ts.map +1 -1
- package/dist/esm/providers/hf-inference.js +27 -30
- package/dist/esm/providers/hyperbolic.d.ts.map +1 -1
- package/dist/esm/providers/hyperbolic.js +3 -3
- package/dist/esm/providers/nebius.d.ts.map +1 -1
- package/dist/esm/providers/nebius.js +2 -2
- package/dist/esm/providers/novita.d.ts +5 -6
- package/dist/esm/providers/novita.d.ts.map +1 -1
- package/dist/esm/providers/novita.js +66 -16
- package/dist/esm/providers/nscale.d.ts.map +1 -1
- package/dist/esm/providers/nscale.js +2 -2
- package/dist/esm/providers/ovhcloud.d.ts.map +1 -1
- package/dist/esm/providers/ovhcloud.js +2 -2
- package/dist/esm/providers/providerHelper.js +3 -3
- package/dist/esm/providers/replicate.js +4 -4
- package/dist/esm/providers/sambanova.d.ts +16 -0
- package/dist/esm/providers/sambanova.d.ts.map +1 -1
- package/dist/esm/providers/sambanova.js +2 -18
- package/dist/esm/providers/together.d.ts.map +1 -1
- package/dist/esm/providers/together.js +3 -3
- package/dist/esm/tasks/audio/automaticSpeechRecognition.d.ts.map +1 -1
- package/dist/esm/tasks/audio/automaticSpeechRecognition.js +2 -2
- package/dist/esm/utils/request.d.ts.map +1 -1
- package/dist/esm/utils/request.js +77 -12
- package/dist/esm/vendor/type-fest/basic.d.ts +33 -0
- package/dist/esm/vendor/type-fest/basic.d.ts.map +1 -0
- package/dist/esm/vendor/type-fest/basic.js +1 -0
- package/package.json +2 -2
- package/src/errors.ts +82 -0
- package/src/index.ts +1 -1
- package/src/lib/getInferenceProviderMapping.ts +42 -22
- package/src/lib/getProviderHelper.ts +9 -3
- package/src/lib/makeRequestOptions.ts +20 -11
- package/src/package.ts +1 -1
- package/src/providers/black-forest-labs.ts +14 -4
- package/src/providers/fal-ai.ts +59 -23
- package/src/providers/featherless-ai.ts +10 -4
- package/src/providers/hf-inference.ts +75 -34
- package/src/providers/hyperbolic.ts +3 -4
- package/src/providers/nebius.ts +2 -2
- package/src/providers/novita.ts +103 -23
- package/src/providers/nscale.ts +2 -2
- package/src/providers/ovhcloud.ts +2 -2
- package/src/providers/providerHelper.ts +3 -3
- package/src/providers/replicate.ts +4 -4
- package/src/providers/sambanova.ts +3 -4
- package/src/providers/together.ts +3 -3
- package/src/tasks/audio/automaticSpeechRecognition.ts +2 -2
- package/src/tasks/cv/textToVideo.ts +2 -2
- package/src/utils/request.ts +127 -14
- package/src/vendor/type-fest/basic.ts +31 -0
- package/src/vendor/type-fest/license-cc0 +121 -0
- package/src/vendor/type-fest/license-mit +9 -0
- package/dist/commonjs/lib/InferenceOutputError.d.ts +0 -4
- package/dist/commonjs/lib/InferenceOutputError.d.ts.map +0 -1
- package/dist/commonjs/lib/InferenceOutputError.js +0 -10
- package/dist/esm/lib/InferenceOutputError.d.ts +0 -4
- package/dist/esm/lib/InferenceOutputError.d.ts.map +0 -1
- package/dist/esm/lib/InferenceOutputError.js +0 -6
- package/src/lib/InferenceOutputError.ts +0 -8
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for all inference-related errors.
|
|
3
|
+
*/
|
|
4
|
+
export class InferenceClientError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "InferenceClientError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class InferenceClientInputError extends InferenceClientError {
|
|
11
|
+
constructor(message) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.name = "InputError";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
class InferenceClientHttpRequestError extends InferenceClientError {
|
|
17
|
+
httpRequest;
|
|
18
|
+
httpResponse;
|
|
19
|
+
constructor(message, httpRequest, httpResponse) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.httpRequest = {
|
|
22
|
+
...httpRequest,
|
|
23
|
+
...(httpRequest.headers
|
|
24
|
+
? {
|
|
25
|
+
headers: {
|
|
26
|
+
...httpRequest.headers,
|
|
27
|
+
...("Authorization" in httpRequest.headers ? { Authorization: `Bearer [redacted]` } : undefined),
|
|
28
|
+
/// redact authentication in the request headers
|
|
29
|
+
},
|
|
30
|
+
}
|
|
31
|
+
: undefined),
|
|
32
|
+
};
|
|
33
|
+
this.httpResponse = httpResponse;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Thrown when the HTTP request to the provider fails, e.g. due to API issues or server errors.
|
|
38
|
+
*/
|
|
39
|
+
export class InferenceClientProviderApiError extends InferenceClientHttpRequestError {
|
|
40
|
+
constructor(message, httpRequest, httpResponse) {
|
|
41
|
+
super(message, httpRequest, httpResponse);
|
|
42
|
+
this.name = "ProviderApiError";
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Thrown when the HTTP request to the hub fails, e.g. due to API issues or server errors.
|
|
47
|
+
*/
|
|
48
|
+
export class InferenceClientHubApiError extends InferenceClientHttpRequestError {
|
|
49
|
+
constructor(message, httpRequest, httpResponse) {
|
|
50
|
+
super(message, httpRequest, httpResponse);
|
|
51
|
+
this.name = "HubApiError";
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Thrown when the inference output returned by the provider is invalid / does not match the expectations
|
|
56
|
+
*/
|
|
57
|
+
export class InferenceClientProviderOutputError extends InferenceClientError {
|
|
58
|
+
constructor(message) {
|
|
59
|
+
super(message);
|
|
60
|
+
this.name = "ProviderOutputError";
|
|
61
|
+
}
|
|
62
|
+
}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { InferenceClient, InferenceClientEndpoint, HfInference } from "./InferenceClient.js";
|
|
2
|
-
export
|
|
2
|
+
export * from "./errors.js";
|
|
3
3
|
export * from "./types.js";
|
|
4
4
|
export * from "./tasks/index.js";
|
|
5
5
|
import * as snippets from "./snippets/index.js";
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC7F,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC7F,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { InferenceClient, InferenceClientEndpoint, HfInference } from "./InferenceClient.js";
|
|
2
|
-
export
|
|
2
|
+
export * from "./errors.js";
|
|
3
3
|
export * from "./types.js";
|
|
4
4
|
export * from "./tasks/index.js";
|
|
5
5
|
import * as snippets from "./snippets/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getInferenceProviderMapping.d.ts","sourceRoot":"","sources":["../../../src/lib/getInferenceProviderMapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"getInferenceProviderMapping.d.ts","sourceRoot":"","sources":["../../../src/lib/getInferenceProviderMapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAIzF,eAAO,MAAM,6BAA6B,uTAA+C,CAAC;AAE1F,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAC7C,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,6BAA6B,EAAE,WAAW,CAAC,CAAC,CAC3E,CAAC;AAEF,MAAM,WAAW,6BAA6B;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,UAAU,CAAC;CACjB;AAED,wBAAsB,qCAAqC,CAC1D,OAAO,EAAE,OAAO,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IACT,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACtE,GACC,OAAO,CAAC,wBAAwB,CAAC,CAgDnC;AAED,wBAAsB,2BAA2B,CAChD,MAAM,EAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,IAAI,EAAE,UAAU,CAAC;CACjB,EACD,OAAO,EAAE;IACR,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACtE,GACC,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC,CA4B/C;AAED,wBAAsB,eAAe,CACpC,QAAQ,CAAC,EAAE,yBAAyB,EACpC,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC,CAyB5B"}
|
|
@@ -2,6 +2,7 @@ import { HF_HUB_URL } from "../config.js";
|
|
|
2
2
|
import { HARDCODED_MODEL_INFERENCE_MAPPING } from "../providers/consts.js";
|
|
3
3
|
import { EQUIVALENT_SENTENCE_TRANSFORMERS_TASKS } from "../providers/hf-inference.js";
|
|
4
4
|
import { typedInclude } from "../utils/typedInclude.js";
|
|
5
|
+
import { InferenceClientHubApiError, InferenceClientInputError } from "../errors.js";
|
|
5
6
|
export const inferenceProviderMappingCache = new Map();
|
|
6
7
|
export async function fetchInferenceProviderMappingForModel(modelId, accessToken, options) {
|
|
7
8
|
let inferenceProviderMapping;
|
|
@@ -10,22 +11,32 @@ export async function fetchInferenceProviderMappingForModel(modelId, accessToken
|
|
|
10
11
|
inferenceProviderMapping = inferenceProviderMappingCache.get(modelId);
|
|
11
12
|
}
|
|
12
13
|
else {
|
|
13
|
-
const
|
|
14
|
+
const url = `${HF_HUB_URL}/api/models/${modelId}?expand[]=inferenceProviderMapping`;
|
|
15
|
+
const resp = await (options?.fetch ?? fetch)(url, {
|
|
14
16
|
headers: accessToken?.startsWith("hf_") ? { Authorization: `Bearer ${accessToken}` } : {},
|
|
15
17
|
});
|
|
16
|
-
if (resp.
|
|
17
|
-
|
|
18
|
+
if (!resp.ok) {
|
|
19
|
+
if (resp.headers.get("Content-Type")?.startsWith("application/json")) {
|
|
20
|
+
const error = await resp.json();
|
|
21
|
+
if ("error" in error && typeof error.error === "string") {
|
|
22
|
+
throw new InferenceClientHubApiError(`Failed to fetch inference provider mapping for model ${modelId}: ${error.error}`, { url, method: "GET" }, { requestId: resp.headers.get("x-request-id") ?? "", status: resp.status, body: error });
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
throw new InferenceClientHubApiError(`Failed to fetch inference provider mapping for model ${modelId}`, { url, method: "GET" }, { requestId: resp.headers.get("x-request-id") ?? "", status: resp.status, body: await resp.text() });
|
|
27
|
+
}
|
|
18
28
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
.catch(() => null);
|
|
23
|
-
if (inferenceProviderMapping) {
|
|
24
|
-
inferenceProviderMappingCache.set(modelId, inferenceProviderMapping);
|
|
29
|
+
let payload = null;
|
|
30
|
+
try {
|
|
31
|
+
payload = await resp.json();
|
|
25
32
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
catch {
|
|
34
|
+
throw new InferenceClientHubApiError(`Failed to fetch inference provider mapping for model ${modelId}: malformed API response, invalid JSON`, { url, method: "GET" }, { requestId: resp.headers.get("x-request-id") ?? "", status: resp.status, body: await resp.text() });
|
|
35
|
+
}
|
|
36
|
+
if (!payload?.inferenceProviderMapping) {
|
|
37
|
+
throw new InferenceClientHubApiError(`We have not been able to find inference provider information for model ${modelId}.`, { url, method: "GET" }, { requestId: resp.headers.get("x-request-id") ?? "", status: resp.status, body: await resp.text() });
|
|
38
|
+
}
|
|
39
|
+
inferenceProviderMapping = payload.inferenceProviderMapping;
|
|
29
40
|
}
|
|
30
41
|
return inferenceProviderMapping;
|
|
31
42
|
}
|
|
@@ -40,7 +51,7 @@ export async function getInferenceProviderMapping(params, options) {
|
|
|
40
51
|
? EQUIVALENT_SENTENCE_TRANSFORMERS_TASKS
|
|
41
52
|
: [params.task];
|
|
42
53
|
if (!typedInclude(equivalentTasks, providerMapping.task)) {
|
|
43
|
-
throw new
|
|
54
|
+
throw new InferenceClientInputError(`Model ${params.modelId} is not supported for task ${params.task} and provider ${params.provider}. Supported task: ${providerMapping.task}.`);
|
|
44
55
|
}
|
|
45
56
|
if (providerMapping.status === "staging") {
|
|
46
57
|
console.warn(`Model ${params.modelId} is in staging mode for provider ${params.provider}. Meant for test purposes only.`);
|
|
@@ -52,7 +63,7 @@ export async function getInferenceProviderMapping(params, options) {
|
|
|
52
63
|
export async function resolveProvider(provider, modelId, endpointUrl) {
|
|
53
64
|
if (endpointUrl) {
|
|
54
65
|
if (provider) {
|
|
55
|
-
throw new
|
|
66
|
+
throw new InferenceClientInputError("Specifying both endpointUrl and provider is not supported.");
|
|
56
67
|
}
|
|
57
68
|
/// Defaulting to hf-inference helpers / API
|
|
58
69
|
return "hf-inference";
|
|
@@ -63,13 +74,13 @@ export async function resolveProvider(provider, modelId, endpointUrl) {
|
|
|
63
74
|
}
|
|
64
75
|
if (provider === "auto") {
|
|
65
76
|
if (!modelId) {
|
|
66
|
-
throw new
|
|
77
|
+
throw new InferenceClientInputError("Specifying a model is required when provider is 'auto'");
|
|
67
78
|
}
|
|
68
79
|
const inferenceProviderMapping = await fetchInferenceProviderMappingForModel(modelId);
|
|
69
80
|
provider = Object.keys(inferenceProviderMapping)[0];
|
|
70
81
|
}
|
|
71
82
|
if (!provider) {
|
|
72
|
-
throw new
|
|
83
|
+
throw new InferenceClientInputError(`No Inference Provider available for model ${modelId}.`);
|
|
73
84
|
}
|
|
74
85
|
return provider;
|
|
75
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getProviderHelper.d.ts","sourceRoot":"","sources":["../../../src/lib/getProviderHelper.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACX,6BAA6B,EAC7B,sBAAsB,EACtB,oCAAoC,EACpC,wBAAwB,EACxB,mCAAmC,EACnC,2BAA2B,EAC3B,kBAAkB,EAClB,6BAA6B,EAC7B,2BAA2B,EAC3B,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,EAC5B,uBAAuB,EACvB,gCAAgC,EAChC,+BAA+B,EAC/B,2BAA2B,EAC3B,kBAAkB,EAClB,4BAA4B,EAC5B,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,iCAAiC,EACjC,gCAAgC,EAChC,qCAAqC,EACrC,MAAM,gCAAgC,CAAC;AAIxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"getProviderHelper.d.ts","sourceRoot":"","sources":["../../../src/lib/getProviderHelper.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ import * as OvhCloud from "../providers/ovhcloud.js";
|
|
|
15
15
|
import * as Replicate from "../providers/replicate.js";
|
|
16
16
|
import * as Sambanova from "../providers/sambanova.js";
|
|
17
17
|
import * as Together from "../providers/together.js";
|
|
18
|
+
import { InferenceClientInputError } from "../errors.js";
|
|
18
19
|
export const PROVIDERS = {
|
|
19
20
|
"black-forest-labs": {
|
|
20
21
|
"text-to-image": new BlackForestLabs.BlackForestLabsTextToImageTask(),
|
|
@@ -86,6 +87,7 @@ export const PROVIDERS = {
|
|
|
86
87
|
novita: {
|
|
87
88
|
conversational: new Novita.NovitaConversationalTask(),
|
|
88
89
|
"text-generation": new Novita.NovitaTextGenerationTask(),
|
|
90
|
+
"text-to-video": new Novita.NovitaTextToVideoTask(),
|
|
89
91
|
},
|
|
90
92
|
nscale: {
|
|
91
93
|
"text-to-image": new Nscale.NscaleTextToImageTask(),
|
|
@@ -118,14 +120,14 @@ export function getProviderHelper(provider, task) {
|
|
|
118
120
|
return new HFInference.HFInferenceTask();
|
|
119
121
|
}
|
|
120
122
|
if (!task) {
|
|
121
|
-
throw new
|
|
123
|
+
throw new InferenceClientInputError("you need to provide a task name when using an external provider, e.g. 'text-to-image'");
|
|
122
124
|
}
|
|
123
125
|
if (!(provider in PROVIDERS)) {
|
|
124
|
-
throw new
|
|
126
|
+
throw new InferenceClientInputError(`Provider '${provider}' not supported. Available providers: ${Object.keys(PROVIDERS)}`);
|
|
125
127
|
}
|
|
126
128
|
const providerTasks = PROVIDERS[provider];
|
|
127
129
|
if (!providerTasks || !(task in providerTasks)) {
|
|
128
|
-
throw new
|
|
130
|
+
throw new InferenceClientInputError(`Task '${task}' not supported for provider '${provider}'. Available tasks: ${Object.keys(providerTasks ?? {})}`);
|
|
129
131
|
}
|
|
130
132
|
return providerTasks[task];
|
|
131
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeRequestOptions.d.ts","sourceRoot":"","sources":["../../../src/lib/makeRequestOptions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAEtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"makeRequestOptions.d.ts","sourceRoot":"","sources":["../../../src/lib/makeRequestOptions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAEtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAUhE;;;GAGG;AACH,wBAAsB,kBAAkB,CACvC,IAAI,EAAE,WAAW,GAAG;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB,EACD,cAAc,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,EACpD,OAAO,CAAC,EAAE,OAAO,GAAG;IACnB,oEAAoE;IACpE,IAAI,CAAC,EAAE,aAAa,CAAC;CACrB,GACC,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,CAqE7C;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CAClD,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,EACpD,IAAI,EAAE,WAAW,GAAG;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB,EACD,OAAO,EAAE,6BAA6B,GAAG,SAAS,EAClD,OAAO,CAAC,EAAE,OAAO,GAAG;IACnB,IAAI,CAAC,EAAE,aAAa,CAAC;CACrB,GACC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CA8EpC"}
|
|
@@ -2,6 +2,7 @@ import { HF_HEADER_X_BILL_TO, HF_HUB_URL } from "../config.js";
|
|
|
2
2
|
import { PACKAGE_NAME, PACKAGE_VERSION } from "../package.js";
|
|
3
3
|
import { getInferenceProviderMapping } from "./getInferenceProviderMapping.js";
|
|
4
4
|
import { isUrl } from "./isUrl.js";
|
|
5
|
+
import { InferenceClientHubApiError, InferenceClientInputError } from "../errors.js";
|
|
5
6
|
/**
|
|
6
7
|
* Lazy-loaded from huggingface.co/api/tasks when needed
|
|
7
8
|
* Used to determine the default model to use when it's not user defined
|
|
@@ -17,22 +18,22 @@ export async function makeRequestOptions(args, providerHelper, options) {
|
|
|
17
18
|
const { task } = options ?? {};
|
|
18
19
|
// Validate inputs
|
|
19
20
|
if (args.endpointUrl && provider !== "hf-inference") {
|
|
20
|
-
throw new
|
|
21
|
+
throw new InferenceClientInputError(`Cannot use endpointUrl with a third-party provider.`);
|
|
21
22
|
}
|
|
22
23
|
if (maybeModel && isUrl(maybeModel)) {
|
|
23
|
-
throw new
|
|
24
|
+
throw new InferenceClientInputError(`Model URLs are no longer supported. Use endpointUrl instead.`);
|
|
24
25
|
}
|
|
25
26
|
if (args.endpointUrl) {
|
|
26
27
|
// No need to have maybeModel, or to load default model for a task
|
|
27
28
|
return makeRequestOptionsFromResolvedModel(maybeModel ?? args.endpointUrl, providerHelper, args, undefined, options);
|
|
28
29
|
}
|
|
29
30
|
if (!maybeModel && !task) {
|
|
30
|
-
throw new
|
|
31
|
+
throw new InferenceClientInputError("No model provided, and no task has been specified.");
|
|
31
32
|
}
|
|
32
33
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
33
34
|
const hfModel = maybeModel ?? (await loadDefaultModel(task));
|
|
34
35
|
if (providerHelper.clientSideRoutingOnly && !maybeModel) {
|
|
35
|
-
throw new
|
|
36
|
+
throw new InferenceClientInputError(`Provider ${provider} requires a model ID to be passed directly.`);
|
|
36
37
|
}
|
|
37
38
|
const inferenceProviderMapping = providerHelper.clientSideRoutingOnly
|
|
38
39
|
? {
|
|
@@ -52,7 +53,7 @@ export async function makeRequestOptions(args, providerHelper, options) {
|
|
|
52
53
|
accessToken: args.accessToken,
|
|
53
54
|
}, { fetch: options?.fetch });
|
|
54
55
|
if (!inferenceProviderMapping) {
|
|
55
|
-
throw new
|
|
56
|
+
throw new InferenceClientInputError(`We have not been able to find inference provider information for model ${hfModel}.`);
|
|
56
57
|
}
|
|
57
58
|
// Use the sync version with the resolved model
|
|
58
59
|
return makeRequestOptionsFromResolvedModel(inferenceProviderMapping.providerId, providerHelper, args, inferenceProviderMapping, options);
|
|
@@ -71,9 +72,8 @@ export function makeRequestOptionsFromResolvedModel(resolvedModel, providerHelpe
|
|
|
71
72
|
if (providerHelper.clientSideRoutingOnly) {
|
|
72
73
|
// Closed-source providers require an accessToken (cannot be routed).
|
|
73
74
|
if (accessToken && accessToken.startsWith("hf_")) {
|
|
74
|
-
throw new
|
|
75
|
+
throw new InferenceClientInputError(`Provider ${provider} is closed-source and does not support HF tokens.`);
|
|
75
76
|
}
|
|
76
|
-
return "provider-key";
|
|
77
77
|
}
|
|
78
78
|
if (accessToken) {
|
|
79
79
|
return accessToken.startsWith("hf_") ? "hf-token" : "provider-key";
|
|
@@ -138,20 +138,21 @@ async function loadDefaultModel(task) {
|
|
|
138
138
|
}
|
|
139
139
|
const taskInfo = tasks[task];
|
|
140
140
|
if ((taskInfo?.models.length ?? 0) <= 0) {
|
|
141
|
-
throw new
|
|
141
|
+
throw new InferenceClientInputError(`No default model defined for task ${task}, please define the model explicitly.`);
|
|
142
142
|
}
|
|
143
143
|
return taskInfo.models[0].id;
|
|
144
144
|
}
|
|
145
145
|
async function loadTaskInfo() {
|
|
146
|
-
const
|
|
146
|
+
const url = `${HF_HUB_URL}/api/tasks`;
|
|
147
|
+
const res = await fetch(url);
|
|
147
148
|
if (!res.ok) {
|
|
148
|
-
throw new
|
|
149
|
+
throw new InferenceClientHubApiError("Failed to load tasks definitions from Hugging Face Hub.", { url, method: "GET" }, { requestId: res.headers.get("x-request-id") ?? "", status: res.status, body: await res.text() });
|
|
149
150
|
}
|
|
150
151
|
return await res.json();
|
|
151
152
|
}
|
|
152
153
|
function removeProviderPrefix(model, provider) {
|
|
153
154
|
if (!model.startsWith(`${provider}/`)) {
|
|
154
|
-
throw new
|
|
155
|
+
throw new InferenceClientInputError(`Models from ${provider} must be prefixed by "${provider}/". Got "${model}".`);
|
|
155
156
|
}
|
|
156
157
|
return model.slice(provider.length + 1);
|
|
157
158
|
}
|
package/dist/esm/package.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../src/package.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../src/package.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,YAAY,2BAA2B,CAAC"}
|
package/dist/esm/package.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Generated file from package.json. Issues importing JSON directly when publishing on commonjs/ESM - see https://github.com/microsoft/TypeScript/issues/51783
|
|
2
|
-
export const PACKAGE_VERSION = "
|
|
2
|
+
export const PACKAGE_VERSION = "4.0.0";
|
|
3
3
|
export const PACKAGE_NAME = "@huggingface/inference";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"black-forest-labs.d.ts","sourceRoot":"","sources":["../../../src/providers/black-forest-labs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"black-forest-labs.d.ts","sourceRoot":"","sources":["../../../src/providers/black-forest-labs.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGvE,OAAO,EAAE,kBAAkB,EAAE,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGrF,UAAU,uBAAuB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,8BAA+B,SAAQ,kBAAmB,YAAW,qBAAqB;;IAKtG,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQlD,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAWtF,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM;IAO9B,WAAW,CAChB,QAAQ,EAAE,uBAAuB,EACjC,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,WAAW,EACrB,UAAU,CAAC,EAAE,KAAK,GAAG,MAAM,GACzB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAsCzB"}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*
|
|
15
15
|
* Thanks!
|
|
16
16
|
*/
|
|
17
|
-
import {
|
|
17
|
+
import { InferenceClientInputError, InferenceClientProviderApiError, InferenceClientProviderOutputError, } from "../errors.js";
|
|
18
18
|
import { delay } from "../utils/delay.js";
|
|
19
19
|
import { omit } from "../utils/omit.js";
|
|
20
20
|
import { TaskProviderHelper } from "./providerHelper.js";
|
|
@@ -41,7 +41,7 @@ export class BlackForestLabsTextToImageTask extends TaskProviderHelper {
|
|
|
41
41
|
}
|
|
42
42
|
makeRoute(params) {
|
|
43
43
|
if (!params) {
|
|
44
|
-
throw new
|
|
44
|
+
throw new InferenceClientInputError("Params are required");
|
|
45
45
|
}
|
|
46
46
|
return `/v1/${params.model}`;
|
|
47
47
|
}
|
|
@@ -53,7 +53,7 @@ export class BlackForestLabsTextToImageTask extends TaskProviderHelper {
|
|
|
53
53
|
urlObj.searchParams.set("attempt", step.toString(10));
|
|
54
54
|
const resp = await fetch(urlObj, { headers: { "Content-Type": "application/json" } });
|
|
55
55
|
if (!resp.ok) {
|
|
56
|
-
throw new
|
|
56
|
+
throw new InferenceClientProviderApiError("Failed to fetch result from black forest labs API", { url: urlObj.toString(), method: "GET", headers: { "Content-Type": "application/json" } }, { requestId: resp.headers.get("x-request-id") ?? "", status: resp.status, body: await resp.text() });
|
|
57
57
|
}
|
|
58
58
|
const payload = await resp.json();
|
|
59
59
|
if (typeof payload === "object" &&
|
|
@@ -73,6 +73,6 @@ export class BlackForestLabsTextToImageTask extends TaskProviderHelper {
|
|
|
73
73
|
return await image.blob();
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
-
throw new
|
|
76
|
+
throw new InferenceClientProviderOutputError(`Timed out while waiting for the result from black forest labs API - aborting after 5 attempts`);
|
|
77
77
|
}
|
|
78
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fal-ai.d.ts","sourceRoot":"","sources":["../../../src/providers/fal-ai.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"fal-ai.d.ts","sourceRoot":"","sources":["../../../src/providers/fal-ai.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAW,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7F,OAAO,EACN,KAAK,oCAAoC,EACzC,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AAOnG,MAAM,WAAW,gBAAgB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,sBAAsB;IAC/B,MAAM,EAAE,KAAK,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACZ,CAAC,CAAC;CACH;AAYD,eAAO,MAAM,2BAA2B,UAA0D,CAAC;AAEnG,uBAAe,SAAU,SAAQ,kBAAkB;gBACtC,GAAG,CAAC,EAAE,MAAM;IAIxB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAG3D,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM;IAG3B,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAUtF;AAMD,qBAAa,oBAAqB,SAAQ,SAAU,YAAW,qBAAqB;IAC1E,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAuBrD,WAAW,CAAC,QAAQ,EAAE,sBAAsB,EAAE,UAAU,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAkBjH;AAED,qBAAa,oBAAqB,SAAQ,SAAU,YAAW,qBAAqB;;IAI1E,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM;IAMpC,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQrD,WAAW,CACzB,QAAQ,EAAE,gBAAgB,EAC1B,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC;CA8EhB;AAED,qBAAa,mCAAoC,SAAQ,SAAU,YAAW,oCAAoC;IACxG,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAKvE,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,gCAAgC,CAAC;IAYlF,mBAAmB,CAAC,IAAI,EAAE,8BAA8B,GAAG,OAAO,CAAC,WAAW,CAAC;CAqBrF;AAED,qBAAa,qBAAsB,SAAQ,SAAS;IAC1C,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQrD,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAmC5D"}
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
* Thanks!
|
|
16
16
|
*/
|
|
17
17
|
import { base64FromBytes } from "../utils/base64FromBytes.js";
|
|
18
|
-
import { InferenceOutputError } from "../lib/InferenceOutputError.js";
|
|
19
18
|
import { isUrl } from "../lib/isUrl.js";
|
|
20
19
|
import { delay } from "../utils/delay.js";
|
|
21
20
|
import { omit } from "../utils/omit.js";
|
|
22
21
|
import { TaskProviderHelper, } from "./providerHelper.js";
|
|
23
22
|
import { HF_HUB_URL } from "../config.js";
|
|
23
|
+
import { InferenceClientInputError, InferenceClientProviderApiError, InferenceClientProviderOutputError, } from "../errors.js";
|
|
24
24
|
export const FAL_AI_SUPPORTED_BLOB_TYPES = ["audio/mpeg", "audio/mp4", "audio/wav", "audio/x-wav"];
|
|
25
25
|
class FalAITask extends TaskProviderHelper {
|
|
26
26
|
constructor(url) {
|
|
@@ -79,7 +79,7 @@ export class FalAITextToImageTask extends FalAITask {
|
|
|
79
79
|
const urlResponse = await fetch(response.images[0].url);
|
|
80
80
|
return await urlResponse.blob();
|
|
81
81
|
}
|
|
82
|
-
throw new
|
|
82
|
+
throw new InferenceClientProviderOutputError("Received malformed response from Fal.ai text-to-image API");
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
export class FalAITextToVideoTask extends FalAITask {
|
|
@@ -101,11 +101,11 @@ export class FalAITextToVideoTask extends FalAITask {
|
|
|
101
101
|
}
|
|
102
102
|
async getResponse(response, url, headers) {
|
|
103
103
|
if (!url || !headers) {
|
|
104
|
-
throw new
|
|
104
|
+
throw new InferenceClientInputError("URL and headers are required for text-to-video task");
|
|
105
105
|
}
|
|
106
106
|
const requestId = response.request_id;
|
|
107
107
|
if (!requestId) {
|
|
108
|
-
throw new
|
|
108
|
+
throw new InferenceClientProviderOutputError("Received malformed response from Fal.ai text-to-video API: no request ID found in the response");
|
|
109
109
|
}
|
|
110
110
|
let status = response.status;
|
|
111
111
|
const parsedUrl = new URL(url);
|
|
@@ -120,13 +120,17 @@ export class FalAITextToVideoTask extends FalAITask {
|
|
|
120
120
|
await delay(500);
|
|
121
121
|
const statusResponse = await fetch(statusUrl, { headers });
|
|
122
122
|
if (!statusResponse.ok) {
|
|
123
|
-
throw new
|
|
123
|
+
throw new InferenceClientProviderApiError("Failed to fetch response status from fal-ai API", { url: statusUrl, method: "GET" }, {
|
|
124
|
+
requestId: statusResponse.headers.get("x-request-id") ?? "",
|
|
125
|
+
status: statusResponse.status,
|
|
126
|
+
body: await statusResponse.text(),
|
|
127
|
+
});
|
|
124
128
|
}
|
|
125
129
|
try {
|
|
126
130
|
status = (await statusResponse.json()).status;
|
|
127
131
|
}
|
|
128
132
|
catch (error) {
|
|
129
|
-
throw new
|
|
133
|
+
throw new InferenceClientProviderOutputError("Failed to parse status response from fal-ai API: received malformed response");
|
|
130
134
|
}
|
|
131
135
|
}
|
|
132
136
|
const resultResponse = await fetch(resultUrl, { headers });
|
|
@@ -135,7 +139,7 @@ export class FalAITextToVideoTask extends FalAITask {
|
|
|
135
139
|
result = await resultResponse.json();
|
|
136
140
|
}
|
|
137
141
|
catch (error) {
|
|
138
|
-
throw new
|
|
142
|
+
throw new InferenceClientProviderOutputError("Failed to parse result response from fal-ai API: received malformed response");
|
|
139
143
|
}
|
|
140
144
|
if (typeof result === "object" &&
|
|
141
145
|
!!result &&
|
|
@@ -149,7 +153,7 @@ export class FalAITextToVideoTask extends FalAITask {
|
|
|
149
153
|
return await urlResponse.blob();
|
|
150
154
|
}
|
|
151
155
|
else {
|
|
152
|
-
throw new
|
|
156
|
+
throw new InferenceClientProviderOutputError(`Received malformed response from Fal.ai text-to-video API: expected { video: { url: string } } result format, got instead: ${JSON.stringify(result)}`);
|
|
153
157
|
}
|
|
154
158
|
}
|
|
155
159
|
}
|
|
@@ -162,7 +166,7 @@ export class FalAIAutomaticSpeechRecognitionTask extends FalAITask {
|
|
|
162
166
|
async getResponse(response) {
|
|
163
167
|
const res = response;
|
|
164
168
|
if (typeof res?.text !== "string") {
|
|
165
|
-
throw new
|
|
169
|
+
throw new InferenceClientProviderOutputError(`Received malformed response from Fal.ai Automatic Speech Recognition API: expected { text: string } format, got instead: ${JSON.stringify(response)}`);
|
|
166
170
|
}
|
|
167
171
|
return { text: res.text };
|
|
168
172
|
}
|
|
@@ -170,10 +174,10 @@ export class FalAIAutomaticSpeechRecognitionTask extends FalAITask {
|
|
|
170
174
|
const blob = "data" in args && args.data instanceof Blob ? args.data : "inputs" in args ? args.inputs : undefined;
|
|
171
175
|
const contentType = blob?.type;
|
|
172
176
|
if (!contentType) {
|
|
173
|
-
throw new
|
|
177
|
+
throw new InferenceClientInputError(`Unable to determine the input's content-type. Make sure your are passing a Blob when using provider fal-ai.`);
|
|
174
178
|
}
|
|
175
179
|
if (!FAL_AI_SUPPORTED_BLOB_TYPES.includes(contentType)) {
|
|
176
|
-
throw new
|
|
180
|
+
throw new InferenceClientInputError(`Provider fal-ai does not support blob type ${contentType} - supported content types are: ${FAL_AI_SUPPORTED_BLOB_TYPES.join(", ")}`);
|
|
177
181
|
}
|
|
178
182
|
const base64audio = base64FromBytes(new Uint8Array(await blob.arrayBuffer()));
|
|
179
183
|
return {
|
|
@@ -193,17 +197,25 @@ export class FalAITextToSpeechTask extends FalAITask {
|
|
|
193
197
|
async getResponse(response) {
|
|
194
198
|
const res = response;
|
|
195
199
|
if (typeof res?.audio?.url !== "string") {
|
|
196
|
-
throw new
|
|
200
|
+
throw new InferenceClientProviderOutputError(`Received malformed response from Fal.ai Text-to-Speech API: expected { audio: { url: string } } format, got instead: ${JSON.stringify(response)}`);
|
|
201
|
+
}
|
|
202
|
+
const urlResponse = await fetch(res.audio.url);
|
|
203
|
+
if (!urlResponse.ok) {
|
|
204
|
+
throw new InferenceClientProviderApiError(`Failed to fetch audio from ${res.audio.url}: ${urlResponse.statusText}`, { url: res.audio.url, method: "GET", headers: { "Content-Type": "application/json" } }, {
|
|
205
|
+
requestId: urlResponse.headers.get("x-request-id") ?? "",
|
|
206
|
+
status: urlResponse.status,
|
|
207
|
+
body: await urlResponse.text(),
|
|
208
|
+
});
|
|
197
209
|
}
|
|
198
210
|
try {
|
|
199
|
-
const urlResponse = await fetch(res.audio.url);
|
|
200
|
-
if (!urlResponse.ok) {
|
|
201
|
-
throw new Error(`Failed to fetch audio from ${res.audio.url}: ${urlResponse.statusText}`);
|
|
202
|
-
}
|
|
203
211
|
return await urlResponse.blob();
|
|
204
212
|
}
|
|
205
213
|
catch (error) {
|
|
206
|
-
throw new
|
|
214
|
+
throw new InferenceClientProviderApiError(`Failed to fetch audio from ${res.audio.url}: ${error instanceof Error ? error.message : String(error)}`, { url: res.audio.url, method: "GET", headers: { "Content-Type": "application/json" } }, {
|
|
215
|
+
requestId: urlResponse.headers.get("x-request-id") ?? "",
|
|
216
|
+
status: urlResponse.status,
|
|
217
|
+
body: await urlResponse.text(),
|
|
218
|
+
});
|
|
207
219
|
}
|
|
208
220
|
}
|
|
209
221
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"featherless-ai.d.ts","sourceRoot":"","sources":["../../../src/providers/featherless-ai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,gCAAgC,EAChC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"featherless-ai.d.ts","sourceRoot":"","sources":["../../../src/providers/featherless-ai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,gCAAgC,EAChC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAIrF,UAAU,iCAAkC,SAAQ,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC;IACxF,OAAO,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,gCAAgC,CAAC;QAChD,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACH;AAID,qBAAa,+BAAgC,SAAQ,sBAAsB;;CAI1E;AAED,qBAAa,+BAAgC,SAAQ,sBAAsB;;IAKjE,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAc1E,WAAW,CAAC,QAAQ,EAAE,iCAAiC,GAAG,OAAO,CAAC,oBAAoB,CAAC;CActG"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { InferenceOutputError } from "../lib/InferenceOutputError.js";
|
|
2
1
|
import { BaseConversationalTask, BaseTextGenerationTask } from "./providerHelper.js";
|
|
2
|
+
import { omit } from "../utils/omit.js";
|
|
3
|
+
import { InferenceClientProviderOutputError } from "../errors.js";
|
|
3
4
|
const FEATHERLESS_API_BASE_URL = "https://api.featherless.ai";
|
|
4
5
|
export class FeatherlessAIConversationalTask extends BaseConversationalTask {
|
|
5
6
|
constructor() {
|
|
@@ -12,9 +13,14 @@ export class FeatherlessAITextGenerationTask extends BaseTextGenerationTask {
|
|
|
12
13
|
}
|
|
13
14
|
preparePayload(params) {
|
|
14
15
|
return {
|
|
15
|
-
...params.args,
|
|
16
|
-
...params.args.parameters,
|
|
17
16
|
model: params.model,
|
|
17
|
+
...omit(params.args, ["inputs", "parameters"]),
|
|
18
|
+
...(params.args.parameters
|
|
19
|
+
? {
|
|
20
|
+
max_tokens: params.args.parameters.max_new_tokens,
|
|
21
|
+
...omit(params.args.parameters, "max_new_tokens"),
|
|
22
|
+
}
|
|
23
|
+
: undefined),
|
|
18
24
|
prompt: params.args.inputs,
|
|
19
25
|
};
|
|
20
26
|
}
|
|
@@ -28,6 +34,6 @@ export class FeatherlessAITextGenerationTask extends BaseTextGenerationTask {
|
|
|
28
34
|
generated_text: completion.text,
|
|
29
35
|
};
|
|
30
36
|
}
|
|
31
|
-
throw new
|
|
37
|
+
throw new InferenceClientProviderOutputError("Received malformed response from Featherless AI text generation API");
|
|
32
38
|
}
|
|
33
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hf-inference.d.ts","sourceRoot":"","sources":["../../../src/providers/hf-inference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EACX,yBAAyB,EACzB,gCAAgC,EAChC,oBAAoB,EACpB,+BAA+B,EAC/B,uBAAuB,EACvB,cAAc,EACd,yBAAyB,EACzB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,EACnB,4BAA4B,EAC5B,wBAAwB,EACxB,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,6BAA6B,EAC7B,4BAA4B,EAC5B,iCAAiC,EACjC,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AAC7F,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEtE,OAAO,KAAK,EACX,6BAA6B,EAC7B,sBAAsB,EACtB,oCAAoC,EACpC,wBAAwB,EACxB,mCAAmC,EACnC,2BAA2B,EAC3B,kBAAkB,EAClB,6BAA6B,EAC7B,2BAA2B,EAC3B,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,EAC5B,uBAAuB,EACvB,gCAAgC,EAChC,+BAA+B,EAC/B,2BAA2B,EAC3B,4BAA4B,EAC5B,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,iCAAiC,EACjC,gCAAgC,EAChC,qCAAqC,EACrC,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AAEnG,UAAU,qBAAqB;IAC9B,IAAI,EAAE,KAAK,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACH;AAED,UAAU,wBAAwB;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,UAAU,kBAAkB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,sCAAsC,wDAAyD,CAAC;AAE7G,qBAAa,eAAgB,SAAQ,kBAAkB;;IAItD,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAGlD,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM;IAO3C,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM;IAQrB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAG/D;AAED,qBAAa,0BAA2B,SAAQ,eAAgB,YAAW,qBAAqB;IAChF,WAAW,CACzB,QAAQ,EAAE,qBAAqB,GAAG,wBAAwB,EAC1D,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,WAAW,EACrB,UAAU,CAAC,EAAE,KAAK,GAAG,MAAM,GACzB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"hf-inference.d.ts","sourceRoot":"","sources":["../../../src/providers/hf-inference.ts"],"names":[],"mappings":"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"}
|