machineuser commited on
Commit
5ee3e16
1 Parent(s): a2706d6

Sync widgets demo

Browse files
packages/tasks/src/snippets/curl.ts CHANGED
@@ -1,8 +1,8 @@
1
- import type { ModelData } from "../model-data.js";
2
  import type { PipelineType } from "../pipelines.js";
3
  import { getModelInputSnippet } from "./inputs.js";
 
4
 
5
- export const snippetBasic = (model: ModelData, accessToken: string): string =>
6
  `curl https://api-inference.huggingface.co/models/${model.id} \\
7
  -X POST \\
8
  -d '{"inputs": ${getModelInputSnippet(model, true)}}' \\
@@ -10,7 +10,7 @@ export const snippetBasic = (model: ModelData, accessToken: string): string =>
10
  -H "Authorization: Bearer ${accessToken || `{API_TOKEN}`}"
11
  `;
12
 
13
- export const snippetZeroShotClassification = (model: ModelData, accessToken: string): string =>
14
  `curl https://api-inference.huggingface.co/models/${model.id} \\
15
  -X POST \\
16
  -d '{"inputs": ${getModelInputSnippet(model, true)}, "parameters": {"candidate_labels": ["refund", "legal", "faq"]}}' \\
@@ -18,14 +18,14 @@ export const snippetZeroShotClassification = (model: ModelData, accessToken: str
18
  -H "Authorization: Bearer ${accessToken || `{API_TOKEN}`}"
19
  `;
20
 
21
- export const snippetFile = (model: ModelData, accessToken: string): string =>
22
  `curl https://api-inference.huggingface.co/models/${model.id} \\
23
  -X POST \\
24
  --data-binary '@${getModelInputSnippet(model, true, true)}' \\
25
  -H "Authorization: Bearer ${accessToken || `{API_TOKEN}`}"
26
  `;
27
 
28
- export const curlSnippets: Partial<Record<PipelineType, (model: ModelData, accessToken: string) => string>> = {
29
  // Same order as in js/src/lib/interfaces/Types.ts
30
  "text-classification": snippetBasic,
31
  "token-classification": snippetBasic,
@@ -51,12 +51,12 @@ export const curlSnippets: Partial<Record<PipelineType, (model: ModelData, acces
51
  "image-segmentation": snippetFile,
52
  };
53
 
54
- export function getCurlInferenceSnippet(model: ModelData, accessToken: string): string {
55
  return model.pipeline_tag && model.pipeline_tag in curlSnippets
56
  ? curlSnippets[model.pipeline_tag]?.(model, accessToken) ?? ""
57
  : "";
58
  }
59
 
60
- export function hasCurlInferenceSnippet(model: ModelData): boolean {
61
  return !!model.pipeline_tag && model.pipeline_tag in curlSnippets;
62
  }
 
 
1
  import type { PipelineType } from "../pipelines.js";
2
  import { getModelInputSnippet } from "./inputs.js";
3
+ import type { ModelDataMinimal } from "./types.js";
4
 
5
+ export const snippetBasic = (model: ModelDataMinimal, accessToken: string): string =>
6
  `curl https://api-inference.huggingface.co/models/${model.id} \\
7
  -X POST \\
8
  -d '{"inputs": ${getModelInputSnippet(model, true)}}' \\
 
10
  -H "Authorization: Bearer ${accessToken || `{API_TOKEN}`}"
11
  `;
12
 
13
+ export const snippetZeroShotClassification = (model: ModelDataMinimal, accessToken: string): string =>
14
  `curl https://api-inference.huggingface.co/models/${model.id} \\
15
  -X POST \\
16
  -d '{"inputs": ${getModelInputSnippet(model, true)}, "parameters": {"candidate_labels": ["refund", "legal", "faq"]}}' \\
 
18
  -H "Authorization: Bearer ${accessToken || `{API_TOKEN}`}"
19
  `;
20
 
21
+ export const snippetFile = (model: ModelDataMinimal, accessToken: string): string =>
22
  `curl https://api-inference.huggingface.co/models/${model.id} \\
23
  -X POST \\
24
  --data-binary '@${getModelInputSnippet(model, true, true)}' \\
25
  -H "Authorization: Bearer ${accessToken || `{API_TOKEN}`}"
26
  `;
27
 
28
+ export const curlSnippets: Partial<Record<PipelineType, (model: ModelDataMinimal, accessToken: string) => string>> = {
29
  // Same order as in js/src/lib/interfaces/Types.ts
30
  "text-classification": snippetBasic,
31
  "token-classification": snippetBasic,
 
51
  "image-segmentation": snippetFile,
52
  };
53
 
54
+ export function getCurlInferenceSnippet(model: ModelDataMinimal, accessToken: string): string {
55
  return model.pipeline_tag && model.pipeline_tag in curlSnippets
56
  ? curlSnippets[model.pipeline_tag]?.(model, accessToken) ?? ""
57
  : "";
58
  }
59
 
60
+ export function hasCurlInferenceSnippet(model: Pick<ModelDataMinimal, "pipeline_tag">): boolean {
61
  return !!model.pipeline_tag && model.pipeline_tag in curlSnippets;
62
  }
packages/tasks/src/snippets/inputs.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type { ModelData } from "../model-data";
2
  import type { PipelineType } from "../pipelines";
 
3
 
4
  const inputsZeroShotClassification = () =>
5
  `"Hi, I recently bought a device from your company but it is not working as advertised and I would like to get reimbursed!"`;
@@ -44,7 +44,7 @@ const inputsTextGeneration = () => `"Can you please let us know more details abo
44
 
45
  const inputsText2TextGeneration = () => `"The answer to the universe is"`;
46
 
47
- const inputsFillMask = (model: ModelData) => `"The answer to the universe is ${model.mask_token}."`;
48
 
49
  const inputsSentenceSimilarity = () =>
50
  `{
@@ -84,7 +84,7 @@ const inputsTabularPrediction = () =>
84
  const inputsZeroShotImageClassification = () => `"cats.jpg"`;
85
 
86
  const modelInputSnippets: {
87
- [key in PipelineType]?: (model: ModelData) => string;
88
  } = {
89
  "audio-to-audio": inputsAudioToAudio,
90
  "audio-classification": inputsAudioClassification,
@@ -116,7 +116,7 @@ const modelInputSnippets: {
116
 
117
  // Use noWrap to put the whole snippet on a single line (removing new lines and tabulations)
118
  // Use noQuotes to strip quotes from start & end (example: "abc" -> abc)
119
- export function getModelInputSnippet(model: ModelData, noWrap = false, noQuotes = false): string {
120
  if (model.pipeline_tag) {
121
  const inputs = modelInputSnippets[model.pipeline_tag];
122
  if (inputs) {
 
 
1
  import type { PipelineType } from "../pipelines";
2
+ import type { ModelDataMinimal } from "./types";
3
 
4
  const inputsZeroShotClassification = () =>
5
  `"Hi, I recently bought a device from your company but it is not working as advertised and I would like to get reimbursed!"`;
 
44
 
45
  const inputsText2TextGeneration = () => `"The answer to the universe is"`;
46
 
47
+ const inputsFillMask = (model: ModelDataMinimal) => `"The answer to the universe is ${model.mask_token}."`;
48
 
49
  const inputsSentenceSimilarity = () =>
50
  `{
 
84
  const inputsZeroShotImageClassification = () => `"cats.jpg"`;
85
 
86
  const modelInputSnippets: {
87
+ [key in PipelineType]?: (model: ModelDataMinimal) => string;
88
  } = {
89
  "audio-to-audio": inputsAudioToAudio,
90
  "audio-classification": inputsAudioClassification,
 
116
 
117
  // Use noWrap to put the whole snippet on a single line (removing new lines and tabulations)
118
  // Use noQuotes to strip quotes from start & end (example: "abc" -> abc)
119
+ export function getModelInputSnippet(model: ModelDataMinimal, noWrap = false, noQuotes = false): string {
120
  if (model.pipeline_tag) {
121
  const inputs = modelInputSnippets[model.pipeline_tag];
122
  if (inputs) {
packages/tasks/src/snippets/js.ts CHANGED
@@ -1,8 +1,8 @@
1
- import type { ModelData } from "../model-data.js";
2
  import type { PipelineType } from "../pipelines.js";
3
  import { getModelInputSnippet } from "./inputs.js";
 
4
 
5
- export const snippetBasic = (model: ModelData, accessToken: string): string =>
6
  `async function query(data) {
7
  const response = await fetch(
8
  "https://api-inference.huggingface.co/models/${model.id}",
@@ -20,7 +20,7 @@ query({"inputs": ${getModelInputSnippet(model)}}).then((response) => {
20
  console.log(JSON.stringify(response));
21
  });`;
22
 
23
- export const snippetZeroShotClassification = (model: ModelData, accessToken: string): string =>
24
  `async function query(data) {
25
  const response = await fetch(
26
  "https://api-inference.huggingface.co/models/${model.id}",
@@ -40,7 +40,7 @@ query({"inputs": ${getModelInputSnippet(
40
  console.log(JSON.stringify(response));
41
  });`;
42
 
43
- export const snippetTextToImage = (model: ModelData, accessToken: string): string =>
44
  `async function query(data) {
45
  const response = await fetch(
46
  "https://api-inference.huggingface.co/models/${model.id}",
@@ -57,7 +57,7 @@ query({"inputs": ${getModelInputSnippet(model)}}).then((response) => {
57
  // Use image
58
  });`;
59
 
60
- export const snippetTextToAudio = (model: ModelData, accessToken: string): string => {
61
  const commonSnippet = `async function query(data) {
62
  const response = await fetch(
63
  "https://api-inference.huggingface.co/models/${model.id}",
@@ -93,7 +93,7 @@ export const snippetTextToAudio = (model: ModelData, accessToken: string): strin
93
  }
94
  };
95
 
96
- export const snippetFile = (model: ModelData, accessToken: string): string =>
97
  `async function query(filename) {
98
  const data = fs.readFileSync(filename);
99
  const response = await fetch(
@@ -112,7 +112,7 @@ query(${getModelInputSnippet(model)}).then((response) => {
112
  console.log(JSON.stringify(response));
113
  });`;
114
 
115
- export const jsSnippets: Partial<Record<PipelineType, (model: ModelData, accessToken: string) => string>> = {
116
  // Same order as in js/src/lib/interfaces/Types.ts
117
  "text-classification": snippetBasic,
118
  "token-classification": snippetBasic,
@@ -138,12 +138,12 @@ export const jsSnippets: Partial<Record<PipelineType, (model: ModelData, accessT
138
  "image-segmentation": snippetFile,
139
  };
140
 
141
- export function getJsInferenceSnippet(model: ModelData, accessToken: string): string {
142
  return model.pipeline_tag && model.pipeline_tag in jsSnippets
143
  ? jsSnippets[model.pipeline_tag]?.(model, accessToken) ?? ""
144
  : "";
145
  }
146
 
147
- export function hasJsInferenceSnippet(model: ModelData): boolean {
148
  return !!model.pipeline_tag && model.pipeline_tag in jsSnippets;
149
  }
 
 
1
  import type { PipelineType } from "../pipelines.js";
2
  import { getModelInputSnippet } from "./inputs.js";
3
+ import type { ModelDataMinimal } from "./types.js";
4
 
5
+ export const snippetBasic = (model: ModelDataMinimal, accessToken: string): string =>
6
  `async function query(data) {
7
  const response = await fetch(
8
  "https://api-inference.huggingface.co/models/${model.id}",
 
20
  console.log(JSON.stringify(response));
21
  });`;
22
 
23
+ export const snippetZeroShotClassification = (model: ModelDataMinimal, accessToken: string): string =>
24
  `async function query(data) {
25
  const response = await fetch(
26
  "https://api-inference.huggingface.co/models/${model.id}",
 
40
  console.log(JSON.stringify(response));
41
  });`;
42
 
43
+ export const snippetTextToImage = (model: ModelDataMinimal, accessToken: string): string =>
44
  `async function query(data) {
45
  const response = await fetch(
46
  "https://api-inference.huggingface.co/models/${model.id}",
 
57
  // Use image
58
  });`;
59
 
60
+ export const snippetTextToAudio = (model: ModelDataMinimal, accessToken: string): string => {
61
  const commonSnippet = `async function query(data) {
62
  const response = await fetch(
63
  "https://api-inference.huggingface.co/models/${model.id}",
 
93
  }
94
  };
95
 
96
+ export const snippetFile = (model: ModelDataMinimal, accessToken: string): string =>
97
  `async function query(filename) {
98
  const data = fs.readFileSync(filename);
99
  const response = await fetch(
 
112
  console.log(JSON.stringify(response));
113
  });`;
114
 
115
+ export const jsSnippets: Partial<Record<PipelineType, (model: ModelDataMinimal, accessToken: string) => string>> = {
116
  // Same order as in js/src/lib/interfaces/Types.ts
117
  "text-classification": snippetBasic,
118
  "token-classification": snippetBasic,
 
138
  "image-segmentation": snippetFile,
139
  };
140
 
141
+ export function getJsInferenceSnippet(model: ModelDataMinimal, accessToken: string): string {
142
  return model.pipeline_tag && model.pipeline_tag in jsSnippets
143
  ? jsSnippets[model.pipeline_tag]?.(model, accessToken) ?? ""
144
  : "";
145
  }
146
 
147
+ export function hasJsInferenceSnippet(model: ModelDataMinimal): boolean {
148
  return !!model.pipeline_tag && model.pipeline_tag in jsSnippets;
149
  }
packages/tasks/src/snippets/python.ts CHANGED
@@ -1,8 +1,8 @@
1
- import type { ModelData } from "../model-data.js";
2
  import type { PipelineType } from "../pipelines.js";
3
  import { getModelInputSnippet } from "./inputs.js";
 
4
 
5
- export const snippetZeroShotClassification = (model: ModelData): string =>
6
  `def query(payload):
7
  response = requests.post(API_URL, headers=headers, json=payload)
8
  return response.json()
@@ -12,7 +12,7 @@ output = query({
12
  "parameters": {"candidate_labels": ["refund", "legal", "faq"]},
13
  })`;
14
 
15
- export const snippetZeroShotImageClassification = (model: ModelData): string =>
16
  `def query(data):
17
  with open(data["image_path"], "rb") as f:
18
  img = f.read()
@@ -28,7 +28,7 @@ output = query({
28
  "parameters": {"candidate_labels": ["cat", "dog", "llama"]},
29
  })`;
30
 
31
- export const snippetBasic = (model: ModelData): string =>
32
  `def query(payload):
33
  response = requests.post(API_URL, headers=headers, json=payload)
34
  return response.json()
@@ -37,7 +37,7 @@ output = query({
37
  "inputs": ${getModelInputSnippet(model)},
38
  })`;
39
 
40
- export const snippetFile = (model: ModelData): string =>
41
  `def query(filename):
42
  with open(filename, "rb") as f:
43
  data = f.read()
@@ -46,7 +46,7 @@ export const snippetFile = (model: ModelData): string =>
46
 
47
  output = query(${getModelInputSnippet(model)})`;
48
 
49
- export const snippetTextToImage = (model: ModelData): string =>
50
  `def query(payload):
51
  response = requests.post(API_URL, headers=headers, json=payload)
52
  return response.content
@@ -58,7 +58,7 @@ import io
58
  from PIL import Image
59
  image = Image.open(io.BytesIO(image_bytes))`;
60
 
61
- export const snippetTabular = (model: ModelData): string =>
62
  `def query(payload):
63
  response = requests.post(API_URL, headers=headers, json=payload)
64
  return response.content
@@ -66,7 +66,7 @@ response = query({
66
  "inputs": {"data": ${getModelInputSnippet(model)}},
67
  })`;
68
 
69
- export const snippetTextToAudio = (model: ModelData): string => {
70
  // Transformers TTS pipeline and api-inference-community (AIC) pipeline outputs are diverged
71
  // with the latest update to inference-api (IA).
72
  // Transformers IA returns a byte object (wav file), whereas AIC returns wav and sampling_rate.
@@ -95,7 +95,7 @@ Audio(audio, rate=sampling_rate)`;
95
  }
96
  };
97
 
98
- export const snippetDocumentQuestionAnswering = (model: ModelData): string =>
99
  `def query(payload):
100
  with open(payload["image"], "rb") as f:
101
  img = f.read()
@@ -107,7 +107,7 @@ output = query({
107
  "inputs": ${getModelInputSnippet(model)},
108
  })`;
109
 
110
- export const pythonSnippets: Partial<Record<PipelineType, (model: ModelData) => string>> = {
111
  // Same order as in tasks/src/pipelines.ts
112
  "text-classification": snippetBasic,
113
  "token-classification": snippetBasic,
@@ -137,7 +137,7 @@ export const pythonSnippets: Partial<Record<PipelineType, (model: ModelData) =>
137
  "zero-shot-image-classification": snippetZeroShotImageClassification,
138
  };
139
 
140
- export function getPythonInferenceSnippet(model: ModelData, accessToken: string): string {
141
  const body =
142
  model.pipeline_tag && model.pipeline_tag in pythonSnippets ? pythonSnippets[model.pipeline_tag]?.(model) ?? "" : "";
143
 
@@ -149,6 +149,6 @@ headers = {"Authorization": ${accessToken ? `"Bearer ${accessToken}"` : `f"Beare
149
  ${body}`;
150
  }
151
 
152
- export function hasPythonInferenceSnippet(model: ModelData): boolean {
153
  return !!model.pipeline_tag && model.pipeline_tag in pythonSnippets;
154
  }
 
 
1
  import type { PipelineType } from "../pipelines.js";
2
  import { getModelInputSnippet } from "./inputs.js";
3
+ import type { ModelDataMinimal } from "./types.js";
4
 
5
+ export const snippetZeroShotClassification = (model: ModelDataMinimal): string =>
6
  `def query(payload):
7
  response = requests.post(API_URL, headers=headers, json=payload)
8
  return response.json()
 
12
  "parameters": {"candidate_labels": ["refund", "legal", "faq"]},
13
  })`;
14
 
15
+ export const snippetZeroShotImageClassification = (model: ModelDataMinimal): string =>
16
  `def query(data):
17
  with open(data["image_path"], "rb") as f:
18
  img = f.read()
 
28
  "parameters": {"candidate_labels": ["cat", "dog", "llama"]},
29
  })`;
30
 
31
+ export const snippetBasic = (model: ModelDataMinimal): string =>
32
  `def query(payload):
33
  response = requests.post(API_URL, headers=headers, json=payload)
34
  return response.json()
 
37
  "inputs": ${getModelInputSnippet(model)},
38
  })`;
39
 
40
+ export const snippetFile = (model: ModelDataMinimal): string =>
41
  `def query(filename):
42
  with open(filename, "rb") as f:
43
  data = f.read()
 
46
 
47
  output = query(${getModelInputSnippet(model)})`;
48
 
49
+ export const snippetTextToImage = (model: ModelDataMinimal): string =>
50
  `def query(payload):
51
  response = requests.post(API_URL, headers=headers, json=payload)
52
  return response.content
 
58
  from PIL import Image
59
  image = Image.open(io.BytesIO(image_bytes))`;
60
 
61
+ export const snippetTabular = (model: ModelDataMinimal): string =>
62
  `def query(payload):
63
  response = requests.post(API_URL, headers=headers, json=payload)
64
  return response.content
 
66
  "inputs": {"data": ${getModelInputSnippet(model)}},
67
  })`;
68
 
69
+ export const snippetTextToAudio = (model: ModelDataMinimal): string => {
70
  // Transformers TTS pipeline and api-inference-community (AIC) pipeline outputs are diverged
71
  // with the latest update to inference-api (IA).
72
  // Transformers IA returns a byte object (wav file), whereas AIC returns wav and sampling_rate.
 
95
  }
96
  };
97
 
98
+ export const snippetDocumentQuestionAnswering = (model: ModelDataMinimal): string =>
99
  `def query(payload):
100
  with open(payload["image"], "rb") as f:
101
  img = f.read()
 
107
  "inputs": ${getModelInputSnippet(model)},
108
  })`;
109
 
110
+ export const pythonSnippets: Partial<Record<PipelineType, (model: ModelDataMinimal) => string>> = {
111
  // Same order as in tasks/src/pipelines.ts
112
  "text-classification": snippetBasic,
113
  "token-classification": snippetBasic,
 
137
  "zero-shot-image-classification": snippetZeroShotImageClassification,
138
  };
139
 
140
+ export function getPythonInferenceSnippet(model: ModelDataMinimal, accessToken: string): string {
141
  const body =
142
  model.pipeline_tag && model.pipeline_tag in pythonSnippets ? pythonSnippets[model.pipeline_tag]?.(model) ?? "" : "";
143
 
 
149
  ${body}`;
150
  }
151
 
152
+ export function hasPythonInferenceSnippet(model: ModelDataMinimal): boolean {
153
  return !!model.pipeline_tag && model.pipeline_tag in pythonSnippets;
154
  }
packages/tasks/src/snippets/types.ts ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ import type { ModelData } from "../model-data";
2
+
3
+ /**
4
+ * Minimal model data required for snippets.
5
+ *
6
+ * Add more fields as needed.
7
+ */
8
+ export type ModelDataMinimal = Pick<ModelData, "id" | "pipeline_tag" | "mask_token" | "library_name">;