Skip to content

SDK Integration (Drop-in Replacement)

The noris API is fully OpenAI-compatible. Migrating existing applications requires minimal effort: change 3 parameters, everything else stays untouched.

Before (against OpenAI):

from openai import OpenAI
client = OpenAI(
api_key="sk-..."
)

After (against noris):

from openai import OpenAI
client = OpenAI(
base_url="https://ai.noris.de/v1",
api_key="YOUR_API_KEY"
)

Before (against OpenAI):

import OpenAI from "openai";
const client = new OpenAI({ apiKey: "sk-..." });

After (against noris):

import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://ai.noris.de/v1",
apiKey: "YOUR_API_KEY"
});

noris offers a compatible endpoint that can be addressed directly with the Anthropic SDK:

from anthropic import Anthropic
client = Anthropic(
base_url="https://ai.noris.de/v1",
api_key="YOUR_API_KEY"
)
message = client.messages.create(
model="vllm/release/gpt-oss-120b",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello!"}]
)
print(message.content[0].text)

In LangChain, it’s enough to override the base URL on the ChatOpenAI object:

Before:

from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o")

After:

from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="vllm/release/gpt-oss-120b",
openai_api_base="https://ai.noris.de/v1",
openai_api_key="YOUR_API_KEY"
)

In LlamaIndex, OpenAILike is configured with the noris base URL:

from llama_index.llms.openai_like import OpenAILike
llm = OpenAILike(
model="vllm/release/gpt-oss-120b",
api_base="https://ai.noris.de/v1",
api_key="YOUR_API_KEY",
is_chat_model=True
)

In LiteLLM, noris is registered as a provider in the router:

model_list:
- model_name: noris-gpt-oss
litellm_params:
model: vllm/release/gpt-oss-120b
api_base: https://ai.noris.de/v1
api_key: YOUR_API_KEY
from litellm import Router
router = Router(model_list=[
{
"model_name": "noris-gpt-oss",
"litellm_params": {
"model": "vllm/release/gpt-oss-120b",
"api_base": "https://ai.noris.de/v1",
"api_key": "YOUR_API_KEY"
}
}
])
response = router.completion(
model="noris-gpt-oss",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)

Regardless of the SDK you choose, the same rule of thumb always applies: change 3 parameters, everything else stays untouched.