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 ».