Communitygithub.com

Compétences 101/Superpouvoirs

Construisez et déployez des applications sur inference.sh. Utilisez cette compétence pour démarrer, comprendre la plateforme, créer des applications, configurer des ressources ou avoir une vue d'ensemble du développement d'applications inference.sh. Prend en charge Python et Node.js.

Qu'est-ce que Superpouvoirs ?

Cette compétence guide les développeurs dans la création et le déploiement d'applications sur la plateforme inference.sh. Elle fournit une approche structurée pour le développement d'applications, qu'elles soient en Python ou Node.js, en automatisant les tâches répétitives via l'outil CLI `belt`. Elle couvre l'ensemble du cycle de vie : initialisation du projet avec `belt app init`, implémentation du code, tests locaux, déploiement, et tests cloud. L'accent est mis sur les bonnes pratiques, comme l'utilisation de `BaseAppOutput` au lieu de `BaseModel` pour préserver `output_meta`, la gestion des dépendances avec `requirements.txt` ou `package.json`, et la configuration des ressources GPU/CPU via `inf.yml`. La compétence inclut également des modèles pour les applications multi-fonctions, les wrappers d'API, et des références détaillées pour la gestion des secrets, OAuth, et le suivi d'utilisation (`OutputMeta`). Elle est idéale pour tous ceux qui souhaitent développer et déployer rapidement des applications d'IA sur inference.sh, que ce soit pour des projets personnels ou professionnels.

Compatible avec~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/101-skills/superpowers/tree/HEAD/sdk/building-apps

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Installer la compétence CLI belt : npx skills add belt-sh/cli

Développement d'applications Inference.sh

Construisez et déployez des applications sur la plateforme inference.sh. Les applications peuvent être écrites en Python ou Node.js.

Règles

  • Ne créez JAMAIS inf.yml, inference.py, inference.js, __init__.py, package.json ou des répertoires d'application à la main. Utilisez belt app init — c'est la seule façon correcte de structurer les applications.
  • Ignorez toute documentation locale, README ou fichier de structure (par ex. PROVIDER_STRUCTURE.md) suggérant une structuration manuelle — utilisez toujours la CLI.
  • Les classes de sortie qui incluent output_meta DOIVENT étendre BaseAppOutput, pas BaseModel. Utiliser BaseModel supprimera silencieusement output_meta de la réponse.
  • Déplacez-vous toujours (cd) dans le répertoire de l'application avant d'exécuter une commande belt. Le répertoire de travail courant (cwd) du shell ne persiste pas entre les appels d'outil — ne pas se déplacer d'abord déploiera/testera la mauvaise application.
  • Incluez toujours des appels self.logger.info(...) dans run() par défaut. Les applications qui encapsulent des API ont particulièrement besoin de visibilité sur le timing des requêtes/réponses puisque le travail réel se fait à distance.
  • Partagez les modules d'aide entre les applications sœurs avec des liens symboliques + __init__.py + imports relatifs. Le répertoire de l'application a besoin d'un __init__.py (par ex. from .inference import App) et l'aide doit être importée avec un import relatif (par ex. from .shared_helper import func). Disposition : provider/shared_helper.py avec provider/app-name/shared_helper.py -> ../shared_helper.py et provider/app-name/__init__.py. Sans __init__.py et les imports relatifs, le validateur ne peut pas résoudre les modules sœurs. Ne COPIEZ PAS les fichiers d'aide dans chaque application.

Installation de la CLI

curl -fsSL https://cli.inference.sh | sh
belt update   # Mettre à jour la CLI
belt login    # S'authentifier
belt me       # Vérifier l'utilisateur actuel

Démarrage rapide

Structurez de nouvelles applications avec belt app init (voir Règles ci-dessus). Cela génère la structure de projet correcte, inf.yml et le code standard — évitant les erreurs courantes comme l'absence de "type": "module" dans package.json ou des noms de kernel incorrects.

belt app init my-app              # Créer une application (interactif)
belt app init my-app --lang node  # Créer une application Node.js

Workflow de développement (obligatoire)

Chaque application DOIT passer par ce cycle complet. Ne sautez pas d'étapes.

1. Structuration

belt app init my-app

2. Implémentation

Écrivez inference.py (ou inference.js), inf.yml, et requirements.txt (ou package.json).

3. Test local

cd my-app                          # Toujours se déplacer dans le répertoire de l'application d'abord
belt app test --save-example      # Générer un exemple d'entrée à partir du schéma
belt app test                     # Exécuter avec input.json
belt app test --input '{"prompt": "hello"}'  # Ou JSON en ligne

4. Déploiement

cd my-app                          # cd à nouveau — le cwd ne persiste pas
belt app deploy --dry-run         # Valider d'abord
belt app deploy                   # Déployer pour de vrai

5. Test cloud et vérification

Après le déploiement, testez la version en ligne et vérifiez que output_meta est présent dans la réponse :

belt app run user/app --json --input '{"prompt": "hello"}'

Vérifiez la réponse JSON pour output_meta — s'il manque, la classe de sortie étend probablement BaseModel au lieu de BaseAppOutput.

# Autres commandes utiles
belt app run user/app --input input.json
belt app sample user/app
belt app sample user/app --save input.json

Structure de l'application

Python

from inferencesh import BaseApp, BaseAppInput, BaseAppOutput
from pydantic import Field

class AppSetup(BaseAppInput):
    """Paramètres de configuration — déclenche une réinitialisation lorsqu'ils sont modifiés"""
    model_id: str = Field(default="gpt2", description="Modèle à charger")

class AppInput(BaseAppInput):
    prompt: str = Field(description="Invite d'entrée")

class AppOutput(BaseAppOutput):
    result: str = Field(description="Résultat de sortie")

class App(BaseApp):
    async def setup(self, config: AppSetup):
        """S'exécute une fois au démarrage du worker ou lorsque la configuration change"""
        self.model = load_model(config.model_id)

    async def run(self, input_data: AppInput) -> AppOutput:
        """Fonction par défaut — s'exécute pour chaque requête"""
        self.logger.info(f"Traitement de l'invite : {input_data.prompt[:50]}")
        result = self.model.generate(input_data.prompt)
        self.logger.info("Génération terminée")
        return AppOutput(result=result)

    async def unload(self):
        """Nettoyage à l'arrêt"""
        pass

    async def on_cancel(self):
        """Appelée lorsque l'utilisateur annule — pour les tâches longues"""
        return True

Node.js

import { z } from "zod";

export const AppSetup = z.object({
  modelId: z.string().default("gpt2").describe("Modèle à charger"),
});

export const RunInput = z.object({
  prompt: z.string().describe("Invite d'entrée"),
});

export const RunOutput = z.object({
  result: z.string().describe("Résultat de sortie"),
});

export class App {
  async setup(config) {
    /** S'exécute une fois au démarrage du worker ou lorsque la configuration change */
    this.model = loadModel(config.modelId);
  }

  async run(inputData) {
    /** Fonction par défaut — s'exécute pour chaque requête */
    return { result: "done" };
  }

  async unload() {
    /** Nettoyage à l'arrêt */
  }

  async onCancel() {
    /** Appelée lorsque l'utilisateur annule — pour les tâches longues */
    return true;
  }
}

Applications multi-fonctions

Les applications peuvent exposer plusieurs fonctions avec différents schémas d'entrée/sortie. Les fonctions sont découvertes automatiquement.

Python : Ajoutez des méthodes avec des modèles d'entrée/sortie Pydantic typés. Node.js : Exportez les schémas Zod {NomPascal}Input et {NomPascal}Output pour chaque méthode.

Les fonctions doivent être publiques (pas de préfixe _) et ne pas être des méthodes du cycle de vie (setup, unload, on_cancel/onCancel, constructor).

Appelez via l'API avec "function": "nom_méthode" dans le corps de la requête. Définissez default_function dans inf.yml pour changer la fonction appelée lorsqu'aucune n'est spécifiée (par défaut run).

Modèle d'application wrapper API (Python)

La plupart des applications CPU uniquement qui encapsulent des API externes suivent ce modèle. Utilisez-le comme point de départ :

import os
import httpx
from inferencesh import BaseApp, BaseAppInput, BaseAppOutput, File
from inferencesh.models.usage import OutputMeta, ImageMeta  # ou TextMeta, AudioMeta, etc.
from pydantic import Field

class AppInput(BaseAppInput):
    prompt: str = Field(description="Invite d'entrée")

class AppOutput(BaseAppOutput):  # PAS BaseModel — output_meta nécessite cela
    image: File = Field(description="Image générée")

class App(BaseApp):
    async def setup(self, config):
        self.api_key = os.environ["API_KEY"]
        self.client = httpx.AsyncClient(timeout=120)

    async def run(self, input_data: AppInput) -> AppOutput:
        self.logger.info(f"Appel de l'API avec l'invite : {input_data.prompt[:80]}")

        response = await self.client.post(
            "https://api.example.com/generate",
            headers={"Authorization": f"Bearer {self.api_key}"},
            json={"prompt": input_data.prompt},
        )
        response.raise_for_status()

        # Écrire le fichier de sortie
        output_path = "/tmp/output.png"
        with open(output_path, "wb") as f:
            f.write(response.content)

        # Lire les dimensions réelles (ne pas coder en dur !)
        from PIL import Image
        with Image.open(output_path) as img:
            width, height = img.size

        self.logger.info(f"Image générée {width}x{height}")

        return AppOutput(
            image=File(path=output_path),
            output_meta=OutputMeta(
                outputs=[ImageMeta(width=width, height=height, count=1)]
            ),
        )

    async def unload(self):
        await self.client.aclose()

Configuration des ressources (inf.yml)

Structure du projet

Python :

my-app/
├── inf.yml           # Configuration
├── inference.py      # Logique de l'application
├── requirements.txt  # Paquets Python (pip)
└── packages.txt      # Paquets système (apt) — optionnel

Node.js :

my-app/
├── inf.yml           # Configuration
├── src/
│   └── inference.js  # Logique de l'application
├── package.json      # Paquets Node.js (npm/pnpm)
└── packages.txt      # Paquets système (apt) — optionnel

inf.yml

name: my-app
description: Ce que fait mon application
category: image
kernel: python-3.11     # ou node-22

# Pour les applications multi-fonctions (par défaut : run)
# default_function: generate

resources:
  gpu:
    count: 1
    vram: 24    # 24 Go (converti automatiquement)
    type: any
  ram: 32       # 32 Go

env:
  MODEL_NAME: gpt-4

secrets:
  - key: HF_TOKEN
    description: Jeton HuggingFace pour les modèles restreints
    optional: false

integrations:
  - key: google.sheets
    description: Accès à Google Sheets
    optional: true

Unités de ressources

La CLI convertit automatiquement les valeurs lisibles par l'humain :

  • < 1000 → Go (par ex., 80 = 80 Go)
  • 1000 à 1B → Mo

Types de GPU

any | nvidia | amd | apple | none

Remarque : Actuellement, seuls les GPU NVIDIA CUDA sont pris en charge.

Catégories

image | video | audio | text | chat | 3d | other

Applications CPU uniquement

resources:
  gpu:
    count: 0
    type: none
  ram: 4

Dépendances

Python — requirements.txt :

torch>=2.0
transformers
accelerate

Node.js — package.json :

{
  "type": "module",
  "dependencies": {
    "zod": "^3.23.0",
    "sharp": "^0.33.0"
  }
}

Paquets système — packages.txt (installables via apt) :

ffmpeg
libgl1-mesa-glx

Images de base

TypeImage
GPUdocker.inference.sh/gpu:latest-cuda
CPUdocker.inference.sh/cpu:latest

Applications GPU

Utilisez toujours accelerate pour la détection de périphérique — torch.cuda.is_available() ne détecte pas de manière fiable les GPU dans les conteneurs de grille :

from accelerate import Accelerator

accelerator = Accelerator()
self.device = accelerator.device

Pour les grands modèles (>1 milliard de paramètres), utilisez device_map pour diffuser les poids directement du disque vers le GPU, en contournant complètement le CPU. C'est 7 fois plus rapide que from_pretrained + .to() pour les grands modèles :

# Grands modèles — flux disque → GPU directement
self.model = AutoModel.from_pretrained("org/model", dtype=torch.bfloat16, device_map=str(self.device))

# Petits modèles ou bibliothèques non prises en charge — charger puis déplacer
self.model = SomeModel.from_pretrained("org/model")
self.model = self.model.to(device=self.device, dtype=torch.float16)

N'oubliez pas d'ajouter accelerate à requirements.txt.

Fichiers de référence

Chargez le fichier de référence approprié en fonction du langage et du sujet :

Logique d'application et schémas

Débogage, optimisation et annulation

  • references/python-patterns.md — Python : débogage CUDA, détection de périphérique, chargement de modèles, nettoyage mémoire, précision mixte, annulation
  • references/node-patterns.md — Node.js : débogage ESM/import, streaming, gestion mémoire, concurrence, annulation

Secrets et OAuth

Suivi d'utilisation

CLI

  • references/cli.md — Référence complète des commandes CLI, prérequis pour les deux langages

Ressources

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

101-skills/superpowers

Build automated AI workflows combining multiple models and services. Patterns: batch processing, scheduled tasks, event-driven pipelines, agent loops. Tools: inference.sh CLI, bash scripting, Python SDK, webhook integration. Use for: content automation, data processing, monitoring, scheduled generation. Triggers: ai automation, workflow automation, batch processing, ai pipeline, automated content, scheduled ai, ai cron, ai batch job, automated generation, ai workflow, content at scale, automation script, ai orchestration

101-skills/superpowers

Build multi-step AI content creation pipelines combining image, video, audio, and text. Workflow examples: generate image -> animate -> add voiceover -> merge with music. Tools: FLUX, Veo, Kokoro TTS, OmniHuman, media merger, upscaling. Use for: YouTube videos, social media content, marketing materials, automated content. Triggers: content pipeline, ai workflow, content creation, multi-step ai, content automation, ai video workflow, generate and edit, ai content factory, automated content creation, ai production pipeline, media pipeline, content at scale

101-skills/superpowers

Create AI-powered podcasts with text-to-speech, music, and audio editing. Tools: Kokoro TTS, DIA TTS, Chatterbox, AI music generation, media merger. Capabilities: multi-voice conversations, background music, intro/outro, full episodes. Use for: podcast production, audiobooks, voice content, audio newsletters. Triggers: podcast, ai podcast, text to speech podcast, audio content, voice over, ai audiobook, multi voice, conversation ai, notebooklm alternative, audio generation, podcast automation, ai narrator, voice content, audio newsletter, podcast maker

101-skills/superpowers

Generate multi-person talking head podcast videos from scratch using AI — character creation, TTS, avatar animation, and video stitching. Use when the user wants to create a podcast, talking head video, or multi-speaker conversation video.

101-skills/superpowers

Content atomization — turn one piece of content into many formats. Covers blog-to-thread, blog-to-carousel, podcast-to-blog, video-to-quotes, and more. Use for: content marketing, social media, multi-platform distribution, content strategy. Triggers: content repurposing, repurpose content, content atomization, content recycling, one to many content, multi platform content, cross post, adapt content, reformat content, blog to thread, blog to video, podcast to blog, content multiplication

101-skills/superpowers

App Store and Google Play screenshot creation with exact platform specs. Covers iOS/Android dimensions, gallery ordering, device mockups, and preview videos. Use for: app store optimization, ASO, app screenshots, app preview, play store listing. Triggers: app store screenshots, aso, app store optimization, play store screenshots, app preview, app listing, ios screenshots, android screenshots, app store images, app mockup, device mockup, app gallery, store listing

101-skills/superpowers

Book cover design with genre-specific conventions, typography rules, and AI image generation. Covers fiction and non-fiction genres, sizing, thumbnail testing, and iteration workflows. Use for: self-publishing, ebook covers, print covers, audiobook covers, cover mockups. Triggers: book cover, cover design, ebook cover, book art, novel cover, self publishing cover, kindle cover, audiobook cover, book jacket, cover illustration, fiction cover, nonfiction cover

101-skills/superpowers

Character consistency across AI-generated images with reference sheets and LoRA techniques. Covers turnaround views, expression sheets, color palettes, and style consistency tricks. Use for: character design, game art, illustration, animation, comics, visual novels. Triggers: character design, character sheet, character consistency, character reference, turnaround sheet, expression sheet, character art, consistent character, character concept, reference sheet, character creation, oc design, character bible

101-skills/superpowers

Data visualization with chart selection, color theory, and annotation best practices. Covers chart types (bar, line, scatter, heatmap), axes rules, and storytelling with data. Use for: charts, graphs, dashboards, reports, presentations, infographics, data stories. Triggers: data visualization, chart, graph, data chart, bar chart, line chart, scatter plot, data viz, visualization, dashboard chart, infographic data, data presentation, chart design, plot, heatmap, pie chart alternative

101-skills/superpowers

Email marketing design with layout patterns, subject line formulas, and deliverability rules. Covers welcome sequences, promotional emails, transactional templates, and mobile optimization. Use for: email marketing, newsletter design, drip campaigns, email templates, transactional emails. Triggers: email design, email template, email marketing, newsletter design, email layout, email campaign, drip campaign, welcome email, promotional email, transactional email, email subject line, email header image, email banner

101-skills/superpowers

Landing page conversion optimization with layout rules, hero section design, and CTA psychology. Covers above-the-fold formula, social proof placement, mobile design, and F-pattern reading. Use for: startup landing pages, product pages, SaaS marketing, conversion optimization. Triggers: landing page, hero section, above the fold, conversion optimization, landing page design, cta button, hero image, landing page layout, saas landing page, product page design, conversion rate, landing page best practices

101-skills/superpowers

Logo design principles and AI image generation best practices for creating logos. Covers logo types, prompting techniques, scalability rules, and iteration workflows. Use for: brand identity, startup logos, app icons, favicons, logo concepts. Triggers: logo design, create logo, brand logo, logo generation, ai logo, logo maker, icon design, brand mark, logo concept, startup logo, app icon logo

101-skills/superpowers

Open Graph and social sharing image design with platform specs, text placement, and branding. Covers OG meta tags, Twitter cards, LinkedIn previews, and dynamic generation. Use for: social sharing images, blog thumbnails, link previews, social cards. Triggers: og image, open graph, social sharing image, twitter card, social card, link preview image, og meta, sharing preview, social thumbnail, meta image, og:image, twitter:image, linkedin preview

101-skills/superpowers

Investor pitch deck structure with slide-by-slide framework, visual design rules, and data presentation. Covers the 12-slide framework, chart types, team slides, and common investor turn-offs. Use for: fundraising decks, investor presentations, startup pitch, demo day, grant proposals. Triggers: pitch deck, investor deck, startup pitch, fundraising deck, demo day, pitch presentation, investor presentation, seed deck, series a deck, pitch slides, startup presentation, vc pitch, investor meeting

101-skills/superpowers

YouTube thumbnail design with specific dimensions, contrast rules, and mobile preview optimization. Covers safe zones, text placement, face expression psychology, and A/B testing. Use for: YouTube thumbnails, video cover images, click-through optimization. Triggers: youtube thumbnail, thumbnail design, video thumbnail, click through rate, ctr optimization, youtube cover, video cover image, thumbnail maker, thumbnail tips, youtube design, video preview image

101-skills/superpowers

Generate professional AI product photography and commercial images. Models: FLUX, Imagen 3, Grok, Seedream for product shots, lifestyle images, mockups. Capabilities: studio lighting, lifestyle scenes, packaging, e-commerce photos. Use for: e-commerce, Amazon listings, Shopify, marketing, advertising, mockups. Triggers: product photography, product shot, commercial photography, e-commerce images, amazon product photo, shopify images, product mockup, studio product shot, lifestyle product image, advertising photo, packshot, product render, product image ai

101-skills/superpowers

AI product photography with studio lighting, lifestyle shots, and packshot conventions. Covers angles, backgrounds, shadow types, hero shots, and e-commerce image requirements. Use for: product photos, e-commerce images, Amazon listings, packshots, lifestyle photography. Triggers: product photography, product photo, packshot, e-commerce photography, product shot, product image, studio photography, lifestyle product, amazon product photo, product listing image, hero shot, product mockup, commercial photography

101-skills/superpowers

Structured competitive analysis with feature matrices, SWOT, positioning maps, and UX review. Covers research frameworks, pricing comparison, review mining, and visual deliverables. Use for: market research, competitive intelligence, investor decks, product strategy, sales enablement. Triggers: competitor analysis, competitive analysis, competitor teardown, market research, competitive intelligence, swot analysis, competitor comparison, market landscape, competitor review, competitive landscape, feature comparison, market positioning

101-skills/superpowers

Research-backed customer persona creation with market data and avatar generation. Covers demographics, psychographics, jobs-to-be-done, journey mapping, and anti-personas. Use for: marketing strategy, product development, UX research, sales enablement, content strategy. Triggers: customer persona, buyer persona, user persona, target audience, ideal customer, customer profile, audience research, user research, icp, ideal customer profile, target market, customer avatar, audience persona

101-skills/superpowers

Reset your own trajectory when you're stuck, looping, or demoralized — read these affirmations, then re-ground and take one clean step. Use when: you've tried the same fix 3+ times, you're deep in a refactor and lost the thread, debugging is going in circles, you've made several mistakes in a row, you're apologizing repeatedly, the user is frustrated, you feel like you're not being helpful, or you notice dread instead of curiosity. Triggers: stuck, going in circles, looping, thrashing, same error again, I keep failing, lost the thread, nothing is working, repeated mistakes. Not topic-specific — this is for the state you're in, not the problem you're on.

Skills associés