Point de terminaison API https://northerninference.ca/v1 Utilisez ceci comme URL de base dans chaque intégration.

LangChain / LlamaIndex

Utilisez Inférence Nordique depuis LangChain et LlamaIndex avec des routes souveraines exactes, la résidence des données au Canada et des registres de possession pour les projets réglementés et du secteur public.

Inférence Nordique est une API d'IA souveraine canadienne pour les équipes du gouvernement, de la défense, de la santé et des secteurs réglementés, y compris les organisations relevant du Programme des marchandises contrôlées. Chaque route comporte une résidence des données au Canada conforme à la LPRPDE, un chemin exact vers les derniers modèles de pointe et à poids ouverts, ainsi qu'un registre de chaîne de possession par requête.

Démarrez en 30 secondes

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="claude-sonnet-4-6-t4",
    api_key="ni_live_YOUR_KEY_HERE",
    base_url="https://northerninference.ca/v1",
)

resp = llm.invoke("What model are you?")
print(resp.content)

Remplacez claude-sonnet-4-6-t4 par n'importe quel identifiant de route provenant de northerninference.ca/portal (page Modèles).


LangChain (Python)

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="claude-sonnet-4-6-t4",
    api_key="ni_live_YOUR_KEY_HERE",
    base_url="https://northerninference.ca/v1",
)

resp = llm.invoke("What model are you?")
print(resp.content)

LangChain (JS/TS)

import { ChatOpenAI } from "@langchain/openai";

const llm = new ChatOpenAI({
  model: "claude-sonnet-4-6-t4",
  apiKey: process.env.NI_API_KEY,
  configuration: {
    baseURL: "https://northerninference.ca/v1",
  },
});

const resp = await llm.invoke("What model are you?");
console.log(resp.content);

LlamaIndex

from llama_index.llms.openai import OpenAI

llm = OpenAI(
    model="claude-sonnet-4-6-t4",
    api_key="ni_live_YOUR_KEY_HERE",
    api_base="https://northerninference.ca/v1",
)

print(llm.complete("What model are you?"))

Capturer la chaîne de possession dans votre application

Chaque réponse de NI porte des en-têtes de possession. LangChain ne les expose pas par invoke(), mais vous pouvez créer une sous-classe de ChatOpenAI ou utiliser .ainvoke_with_config() avec un gestionnaire de rappel pour les capturer :

import httpx
from langchain_openai import ChatOpenAI

class NICustodyCapturingChatOpenAI(ChatOpenAI):
    last_custody_path: str = ""
    last_request_id: str = ""
    last_jurisdiction: str = ""

    def _get_http_client(self):
        transport = httpx.HTTPTransport()
        def log_response(response: httpx.Response):
            self.last_custody_path = response.headers.get("x-ni-custody-path", "")
            self.last_request_id = response.headers.get("x-ni-request-id", "")
            self.last_jurisdiction = response.headers.get("x-ni-resolved-jurisdiction", "")
        return httpx.Client(event_hooks={"response": [log_response]})

Ou, plus simplement : utilisez GET /api/usage/custody/{request_id} après chaque appel pour récupérer la chaîne complète. Le request_id est aussi accessible en cas d'échec via l'en-tête x-ni-request-id dans la réponse 4xx/5xx.

Pour attribuer les dépenses à un dossier, un contrat ou un code SDT, envoyez votre propre référence opaque à chaque appel; elle est enregistrée, affichée dans le portail et intégrée au registre de possession signé. ChatOpenAI l'accepte comme en-tête par défaut :

llm = ChatOpenAI(
    model="claude-haiku-4-5-20251001-t4",
    api_key=NI_API_KEY,
    base_url="https://northerninference.ca/v1",
    default_headers={"X-NI-Reference": reference_for(case_id)},
)

Gardez la valeur opaque (un HMAC à clé de votre identifiant, jamais l'identifiant lui-même); les règles complètes se trouvent dans le guide curl sous « Tag a request with your own reference ».


Vous constatez un problème? Écrivez à support at northerninference dot ca.

↑