Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
| import type { PipelineType } from "../pipelines.js"; | |
| import { getModelInputSnippet } from "./inputs.js"; | |
| import type { ModelDataMinimal } from "./types.js"; | |
| export const snippetZeroShotClassification = (model: ModelDataMinimal): string => | |
| `def query(payload): | |
| response = requests.post(API_URL, headers=headers, json=payload) | |
| return response.json() | |
| output = query({ | |
| "inputs": ${getModelInputSnippet(model)}, | |
| "parameters": {"candidate_labels": ["refund", "legal", "faq"]}, | |
| })`; | |
| export const snippetZeroShotImageClassification = (model: ModelDataMinimal): string => | |
| `def query(data): | |
| with open(data["image_path"], "rb") as f: | |
| img = f.read() | |
| payload={ | |
| "parameters": data["parameters"], | |
| "inputs": base64.b64encode(img).decode("utf-8") | |
| } | |
| response = requests.post(API_URL, headers=headers, json=payload) | |
| return response.json() | |
| output = query({ | |
| "image_path": ${getModelInputSnippet(model)}, | |
| "parameters": {"candidate_labels": ["cat", "dog", "llama"]}, | |
| })`; | |
| export const snippetBasic = (model: ModelDataMinimal): string => | |
| `def query(payload): | |
| response = requests.post(API_URL, headers=headers, json=payload) | |
| return response.json() | |
| output = query({ | |
| "inputs": ${getModelInputSnippet(model)}, | |
| })`; | |
| export const snippetFile = (model: ModelDataMinimal): string => | |
| `def query(filename): | |
| with open(filename, "rb") as f: | |
| data = f.read() | |
| response = requests.post(API_URL, headers=headers, data=data) | |
| return response.json() | |
| output = query(${getModelInputSnippet(model)})`; | |
| export const snippetTextToImage = (model: ModelDataMinimal): string => | |
| `def query(payload): | |
| response = requests.post(API_URL, headers=headers, json=payload) | |
| return response.content | |
| image_bytes = query({ | |
| "inputs": ${getModelInputSnippet(model)}, | |
| }) | |
| # You can access the image with PIL.Image for example | |
| import io | |
| from PIL import Image | |
| image = Image.open(io.BytesIO(image_bytes))`; | |
| export const snippetTabular = (model: ModelDataMinimal): string => | |
| `def query(payload): | |
| response = requests.post(API_URL, headers=headers, json=payload) | |
| return response.content | |
| response = query({ | |
| "inputs": {"data": ${getModelInputSnippet(model)}}, | |
| })`; | |
| export const snippetTextToAudio = (model: ModelDataMinimal): string => { | |
| // Transformers TTS pipeline and api-inference-community (AIC) pipeline outputs are diverged | |
| // with the latest update to inference-api (IA). | |
| // Transformers IA returns a byte object (wav file), whereas AIC returns wav and sampling_rate. | |
| if (model.library_name === "transformers") { | |
| return `def query(payload): | |
| response = requests.post(API_URL, headers=headers, json=payload) | |
| return response.content | |
| audio_bytes = query({ | |
| "inputs": ${getModelInputSnippet(model)}, | |
| }) | |
| # You can access the audio with IPython.display for example | |
| from IPython.display import Audio | |
| Audio(audio_bytes)`; | |
| } else { | |
| return `def query(payload): | |
| response = requests.post(API_URL, headers=headers, json=payload) | |
| return response.json() | |
| audio, sampling_rate = query({ | |
| "inputs": ${getModelInputSnippet(model)}, | |
| }) | |
| # You can access the audio with IPython.display for example | |
| from IPython.display import Audio | |
| Audio(audio, rate=sampling_rate)`; | |
| } | |
| }; | |
| export const snippetDocumentQuestionAnswering = (model: ModelDataMinimal): string => | |
| `def query(payload): | |
| with open(payload["image"], "rb") as f: | |
| img = f.read() | |
| payload["image"] = base64.b64encode(img).decode("utf-8") | |
| response = requests.post(API_URL, headers=headers, json=payload) | |
| return response.json() | |
| output = query({ | |
| "inputs": ${getModelInputSnippet(model)}, | |
| })`; | |
| export const pythonSnippets: Partial<Record<PipelineType, (model: ModelDataMinimal) => string>> = { | |
| // Same order as in tasks/src/pipelines.ts | |
| "text-classification": snippetBasic, | |
| "token-classification": snippetBasic, | |
| "table-question-answering": snippetBasic, | |
| "question-answering": snippetBasic, | |
| "zero-shot-classification": snippetZeroShotClassification, | |
| translation: snippetBasic, | |
| summarization: snippetBasic, | |
| "feature-extraction": snippetBasic, | |
| "text-generation": snippetBasic, | |
| "text2text-generation": snippetBasic, | |
| "fill-mask": snippetBasic, | |
| "sentence-similarity": snippetBasic, | |
| "automatic-speech-recognition": snippetFile, | |
| "text-to-image": snippetTextToImage, | |
| "text-to-speech": snippetTextToAudio, | |
| "text-to-audio": snippetTextToAudio, | |
| "audio-to-audio": snippetFile, | |
| "audio-classification": snippetFile, | |
| "image-classification": snippetFile, | |
| "tabular-regression": snippetTabular, | |
| "tabular-classification": snippetTabular, | |
| "object-detection": snippetFile, | |
| "image-segmentation": snippetFile, | |
| "document-question-answering": snippetDocumentQuestionAnswering, | |
| "image-to-text": snippetFile, | |
| "zero-shot-image-classification": snippetZeroShotImageClassification, | |
| }; | |
| export function getPythonInferenceSnippet(model: ModelDataMinimal, accessToken: string): string { | |
| const body = | |
| model.pipeline_tag && model.pipeline_tag in pythonSnippets ? pythonSnippets[model.pipeline_tag]?.(model) ?? "" : ""; | |
| return `import requests | |
| API_URL = "https://api-inference.huggingface.co/models/${model.id}" | |
| headers = {"Authorization": ${accessToken ? `"Bearer ${accessToken}"` : `f"Bearer {API_TOKEN}"`}} | |
| ${body}`; | |
| } | |
| export function hasPythonInferenceSnippet(model: ModelDataMinimal): boolean { | |
| return !!model.pipeline_tag && model.pipeline_tag in pythonSnippets; | |
| } | |