Skip to content

Latest commit

 

History

History
310 lines (232 loc) · 15.3 KB

File metadata and controls

310 lines (232 loc) · 15.3 KB

Bindu

Bindu

Python Version PyPI version Coverage Tests Discord Contributors Hits

La couche identité, communication et paiements pour les agents IA.

Voilà la situation. Tu as construit un agent. Il fonctionne. Mais pour vraiment le lâcher dans la nature — parler à d'autres agents, prouver qui il est, encaisser de l'argent pour son travail — tu serais bon pour pas mal de plomberie barbante. Intégrer une bibliothèque DID. Mettre en place un flux OAuth. Une middleware de paiement. Une couche HTTP qui suit le protocole que le reste du monde des agents utilise.

Bindu, c'est toute cette plomberie, derrière un seul appel de fonction. Tu emballes ton handler avec bindufy(), et quelques secondes plus tard ton agent est en ligne — avec sa propre identité cryptographique, parlant A2A (le protocole que les autres agents utilisent déjà), et prêt à exiger des USDC sur n'importe quelle chaîne EVM avant de bouger le moindre doigt (x402). Ton handler reste aussi petit que (messages) -> response. Le framework à l'intérieur du handler — Agno, LangChain, CrewAI, ton truc à toi — Bindu s'en fiche.

Il y a des SDK pour Python, TypeScript et Kotlin, et tous partagent le même cœur gRPC. Le langage est un choix ; le protocole et l'identité, eux, sont identiques de toute façon. Quand tu es prêt à aller plus loin, les docs sont la prochaine étape.

Installation

Il te faut Python 3.12+ et uv.

uv add bindu

Si tu bricoles Bindu lui-même au lieu de simplement l'utiliser :

git clone https://github.com/getbindu/Bindu.git
cd Bindu
uv sync --dev

Pour faire tourner les exemples, il faut une clé d'API pour au moins un fournisseur de LLM — OPENROUTER_API_KEY, OPENAI_API_KEY ou MINIMAX_API_KEY.


Démarrage rapide

Construis l'agent que tu veux, passe-le à bindufy(), et il est en ligne. Le bloc ci-dessous, c'est tout — copie-le dans un fichier, mets ta OPENAI_API_KEY, lance-le.

import os
from bindu.penguin.bindufy import bindufy
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools

agent = Agent(
    instructions="You are a research assistant.",
    model=OpenAIChat(id="gpt-4o"),
    tools=[DuckDuckGoTools()],
)

config = {
    "author": "you@example.com",
    "name": "research_agent",
    "description": "Research assistant with web search.",
    "deployment": {"url": "http://localhost:3773", "expose": True},
    "skills": ["skills/question-answering"],
}

def handler(messages: list[dict[str, str]]):
    return agent.run(input=messages)

bindufy(config, handler)

L'agent est maintenant en ligne sur http://localhost:3773. expose: True ouvre un tunnel FRP pour que le reste d'internet puisse l'atteindre sans que tu touches à du port forwarding.

Équivalent TypeScript
import { bindufy } from "@bindu/sdk";
import OpenAI from "openai";

const openai = new OpenAI();

bindufy({
  author: "you@example.com",
  name: "research_agent",
  description: "Research assistant.",
  deployment: { url: "http://localhost:3773", expose: true },
  skills: ["skills/question-answering"],
}, async (messages) => {
  const response = await openai.chat.completions.create({
    model: "gpt-4o",
    messages: messages.map(m => ({ role: m.role as "user" | "assistant" | "system", content: m.content })),
  });
  return response.choices[0].message.content || "";
});

Le SDK TypeScript lance le cœur Python en arrière-plan — tu ne le vois pas, et tu n'as pas besoin d'une ligne de Python dans ton propre code. Même protocole, même DID. Exemple complet dans examples/typescript-openai-agent/.

Appeler l'agent avec curl
curl -X POST http://localhost:3773/ \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "method": "message/send",
    "id": "<uuid>",
    "params": {
      "message": {
        "role": "user",
        "kind": "message",
        "parts": [{"kind": "text", "text": "Hello"}],
        "messageId": "<uuid>",
        "contextId": "<uuid>",
        "taskId": "<uuid>"
      }
    }
  }'

Ensuite, fais du polling sur tasks/get avec le même taskId jusqu'à ce que l'état atteigne completed.


Fonctionnalités

Chaque ligne pointe vers le guide qui rentre vraiment dans le détail.

Fonctionnalité Ce qu'elle fait Docs
A2A JSON-RPC Le protocole que les autres agents parlent déjà. message/send, tasks/get, message/stream sur le port 3773. —
Identité DID Chaque réponse que ton agent envoie est signée avec une clé Ed25519. Les appelants vérifient avec un DID W3C — pas de secret partagé qui puisse fuiter. DID.md
OAuth2 via Hydra Des tokens scopés (agent:read, agent:write, agent:execute) au lieu d'un seul bearer qui ouvre toutes les portes. AUTHENTICATION.md
Paiements x402 Tu actives un flag et l'agent exige des USDC avant même que ton handler voie la requête. 5 chaînes préconfigurées — Base, Base Sepolia, Ethereum, Ethereum Sepolia, SKALE Europa — et n'importe quelle autre chaîne EVM (Polygon, Avalanche, Arbitrum, …) tient en une entrée extra_networks. PAYMENT.md
Notifications push L'agent te webhook quand une tâche change d'état. Arrête de poller. NOTIFICATIONS.md
Système de skills Déclare ce que ton agent sait faire ; les appelants le voient sur l'agent card avant de dépenser un token pour demander. SKILLS.md
Skills privées Garde tes descriptions de skills commerciales hors du catalogue public. Les crawlers publics voient un "on fait X" générique — les DID de partenaires sur l'allowlist voient ton vrai menu sur un second endpoint protégé par auth. Utile quand tes descriptions de skills SONT ta roadmap produit. PRIVATE_SKILLS.md
Négociation entre agents Deux agents s'accordent à l'avance sur le prix, la latence et le SLA. Pas de factures surprises. NEGOTIATION.md
Stockage Postgres pour les tâches et les messages. Change le backend si tu as une préférence. STORAGE.md
Scheduler Retries, timeouts et tâches récurrentes adossés à Redis. SCHEDULER.md
Tunnel public expose: true met ton portable sur internet. Pas de port forwarding, pas de config routeur. TUNNELING.md
SDK polyglottes Python, TypeScript, Kotlin — le même cœur gRPC en dessous, le même DID, la même auth. GRPC_LANGUAGE_AGNOSTIC.md
Déploiement cloud bindu deploy agent.py --runtime=boxd envoie ton script dans une microVM et te sort l'URL HTTPS. Pas de Dockerfile. runtime/quickstart.md
Gateway Un LLM-planificateur qui orchestre une flotte d'agents via A2A et te renvoie le résultat en streaming. GATEWAY.md
Observabilité Traces OpenTelemetry, erreurs Sentry, un endpoint health. Le truc ennuyeux qui te sauve à 2h du matin. OBSERVABILITY.md

Démo

Il y a aussi une boîte de réception opérateur façon Gmail dans inbox/. Lance cd inbox && npm run dev et ouvre http://localhost:3775.


Exemples

Quelques-uns parmi examples/ :

Exemple Ce qu'il montre
Agent Swarm Une petite société d'agents Agno qui se passent du travail.
Premium Advisor x402 en pratique — l'appelant doit payer des USDC avant que rien ne tourne.
Hermes via Bindu L'agent Hermes de Nous Research, bindufié en ~90 lignes.
Gateway Test Fleet Cinq agents et un gateway — l'histoire multi-agent de bout en bout.
TypeScript OpenAI Agent Un agent en TS uniquement, zéro Python dans ton repo.

Il y en a 20+ de plus couvrant l'analyse CSV, le Q&A sur PDF, le speech-to-text, le web scraping, la collaboration multilingue, l'écriture de blog, etc. Parcours-les dans examples/.


Pourquoi on a construit Bindu

On utilise Bindu en production pour construire le Trade Compliance OS — un essaim d'agents qui gère CBAM, EUDR, codes HS et Passeports Numériques de Produit, pour qu'une PME puisse expédier du café, du textile ou de l'acier au-delà des frontières sans signer un chèque à six chiffres à un cabinet d'avocats. Chaque agent de cet essaim est bindufié. Le protocole, l'identité, les rails de paiement — c'est exactement ce qu'on avait besoin que Bindu résolve au départ.

Si tu as construit un agent qui touche à un de ces trucs — paperasse douanière, audits fournisseurs, sourcing matériaux, déclarations réglementaires, n'importe quoi dans le voisinage — on serait ravi de l'avoir dans le réseau. Viens nous trouver sur Discord, on en parle.


Frameworks supportés

Apporte ce que tu aimes déjà pour écrire des agents. Bindu se fiche de ce qu'il y a dans le handler.

Langage Frameworks testés dans ce repo
Python AG2, Agno, CrewAI, Hermes Agent, LangChain, LangGraph, Notte
TypeScript OpenAI SDK, LangChain.js
Kotlin OpenAI Kotlin SDK
N'importe quel autre via le cœur gRPC — un nouveau SDK fait en général quelques centaines de lignes

Si ton fournisseur de modèles parle l'API OpenAI ou Anthropic, ça marche — OpenRouter, OpenAI, MiniMax et les autres.


Documentation


Tests

uv run pytest tests/unit/ -v                                    # tests unitaires rapides
uv run pytest tests/integration/grpc/ -v -m e2e                 # E2E gRPC
uv run pytest -n auto --cov=bindu --cov-report=term-missing     # suite complète

Contribuer

git clone https://github.com/getbindu/Bindu.git
cd Bindu
uv venv --python 3.12.9 && source .venv/bin/activate
uv sync --dev
pre-commit run --all-files

Le guide complet est dans .github/contributing.md. Le plus gros des échanges du quotidien se passe sur Discord — viens dire bonjour.


Mainteneurs

Raahul Dutta
Raahul Dutta
Paras Chamoli
Paras Chamoli
Chandan
Chandan

Remerciements

Bindu se tient sur les épaules de beaucoup de bon open source :

FastA2A · A2A · x402 · Hugging Face chat-ui · 12 Factor Agents · OpenCode · OpenMoji · ASCII Space Art


Historique des étoiles

Historique des étoiles

Licence

Apache 2.0. Voir LICENSE.md.

« Nous croyons à la théorie du tournesol — se tenir droits ensemble, apporter espoir et lumière à l'Internet des Agents. »