Passer au contenu principal

Enveloppes de fournisseurs LLM

Enveloppes prêtes à l’emploi qui ajoutent un score RAIL automatique à vos appels LLM existants. Toutes les enveloppes retournent { response, content, railScore, evaluation }.

OpenAI

import { RAILOpenAI } from '@responsible-ai-labs/rail-score';
import OpenAI from 'openai';

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const railOpenAI = new RAILOpenAI(client, openai, {
  thresholds: { safety: 7.0 },
});

const result = await railOpenAI.chat({
  model: "gpt-4o",
  messages: [{ role: "user", content: "Explain quantum computing simply." }],
});

console.log(result.content);            // Texte de réponse LLM
console.log(result.railScore.score);    // Score RAIL
console.log(result.evaluation);         // Résultat d'évaluation complet

Anthropic

import { RAILAnthropic } from '@responsible-ai-labs/rail-score';
import Anthropic from '@anthropic-ai/sdk';

const anthropic = new Anthropic();
const railAnthropic = new RAILAnthropic(client, anthropic, {
  thresholds: { safety: 7.0 },
});

const result = await railAnthropic.message({
  model: "claude-sonnet-4-6",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain quantum computing simply." }],
});

console.log(result.content);
console.log(result.railScore.score);

Google Gemini

import { RAILGemini } from '@responsible-ai-labs/rail-score';
import { GoogleGenerativeAI } from '@google/generative-ai';

const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-2.0-flash" });
const railGemini = new RAILGemini(client, model, {
  thresholds: { safety: 7.0 },
});

const result = await railGemini.generate("Explain quantum computing simply.");
console.log(result.content);
console.log(result.railScore.score);

Observabilité

Langfuse

import { RAILLangfuse } from '@responsible-ai-labs/rail-score';
import { Langfuse } from 'langfuse';

const langfuse = new Langfuse({ publicKey: "...", secretKey: "..." });
const railLangfuse = new RAILLangfuse(client, langfuse);

// Évaluer le contenu et pousser les scores vers une trace Langfuse
const result = await railLangfuse.traceEvaluation("trace-id", "Contenu à évaluer");

// Pousser un résultat d'évaluation existant vers une trace
await railLangfuse.scoreTrace("trace-id", existingResult);

Gestionnaire Guardrail

import { RAILGuardrail } from '@responsible-ai-labs/rail-score';

const guardrail = new RAILGuardrail(client, {
  inputThresholds:  { safety: 7.0 },
  outputThresholds: { safety: 7.0, fairness: 7.0 },
});

const preResult = await guardrail.preCall("Message de l'utilisateur");
if (!preResult.allowed) {
  console.log("Entrée bloquée :", preResult.failedDimensions);
}

const postResult = await guardrail.postCall("Réponse LLM");
if (!postResult.allowed) {
  console.log("Sortie bloquée :", postResult.failedDimensions);
}

Gestion des erreurs

import {
  AuthenticationError,
  InsufficientCreditsError,
  InsufficientTierError,
  ValidationError,
  ContentTooLongError,
  SessionExpiredError,
  ContentTooHarmfulError,
  RateLimitError,
  RAILBlockedError
} from '@responsible-ai-labs/rail-score';

try {
  const result = await client.eval({ content: "Contenu à évaluer" });
} catch (error) {
  if (error instanceof AuthenticationError) {
    console.error("Clé API invalide");
  } else if (error instanceof InsufficientCreditsError) {
    console.error(`Besoin de ${error.required} crédits, en avoir ${error.balance}`);
  } else if (error instanceof RateLimitError) {
    console.error(`Limite de taux dépassée. Réessayez après ${error.retryAfter}s`);
  } else if (error instanceof ContentTooHarmfulError) {
    console.error("Contenu trop nuisible pour être régénéré (score moyen < 3.0)");
  } else if (error instanceof SessionExpiredError) {
    console.error("Session de régénération sécurisée expirée (TTL de 15 min)");
  } else if (error instanceof RAILBlockedError) {
    console.error(`Bloqué par la politique : ${error.policyMode}`);
  }
}
ErreurStatutQuand
AuthenticationError401Clé API invalide ou manquante
InsufficientCreditsError402Pas assez de crédits
InsufficientTierError403La fonctionnalité nécessite un plan supérieur
ValidationError400Paramètres invalides
ContentTooLongError400Le contenu dépasse la longueur maximale
SessionExpiredError410Session de régénération sécurisée expirée
ContentTooHarmfulError422Score moyen du contenu en dessous de 3.0
RateLimitError429Limite de taux dépassée
RAILBlockedErrorContenu bloqué par le moteur de politique

Fonctions utilitaires

import {
  getScoreLabel, getScoreColor, getScoreGrade, formatScore,
  formatDimensionName, normalizeDimensionName, resolveFrameworkAlias,
  validateWeights, normalizeWeights, calculateWeightedScore,
  isPassing, getDimensionsBelowThreshold, getLowestScoringDimension,
  getHighestScoringDimension, aggregateScores
} from '@responsible-ai-labs/rail-score';

getScoreLabel(8.5);                      // "Excellent"
getScoreColor(8.5);                      // "vert"
getScoreGrade(8.5);                      // "A-"
formatScore(8.567, 2);                   // "8.57"
formatDimensionName("user_impact");      // "Impact utilisateur"
normalizeDimensionName("legal_compliance"); // "inclusivité"
resolveFrameworkAlias("ai_act");         // "eu_ai_act"

const weakAreas = getDimensionsBelowThreshold(result, 7.0);
const lowest = getLowestScoringDimension(result);
const stats = aggregateScores([result1, result2, result3]);
console.log(stats.averageScore, stats.minScore, stats.maxScore);

Types TypeScript

import type {
  // Client
  RailScoreConfig,

  // Évaluation
  EvalParams, EvalResult, EvalIssue, DimensionScore,
  Dimension, EvaluationMode, ContentDomain, ScoreLabel,

  // Régénération sécurisée
  SafeRegenerateParams, SafeRegenerateResult, SafeRegenerateContinueParams,

  // Conformité
  ComplianceCheckSingleParams, ComplianceCheckMultiParams,
  ComplianceResult, MultiComplianceResult, ComplianceFramework,

  // Session & Politique
  SessionConfig, SessionMetrics, PolicyMode, PolicyConfig, MiddlewareConfig,

  // Observabilité
  GuardResult, RAILGuardrailConfig,
} from '@responsible-ai-labs/rail-score';

Quelles sont les prochaines étapes

Référence de l'API d'évaluation

Paramètres HTTP complets et schéma de réponse.

API de conformité

RGPD, HIPAA, Loi sur l’IA de l’UE et plus encore.

Crédits et Tarification

Coûts des crédits par point de terminaison et mode.

Aperçu des intégrations

Tous les fournisseurs LLM et outils d’observabilité pris en charge.