DOCUMENTATION / Developers
Local API
Connect to the local gateway with native System One requests or the OpenAI-compatible adapter.
Find your endpoint
The gateway prefers http://127.0.0.1:11435. If occupied, Noullama chooses a nearby free port, skips its private runtime port, and saves the replacement as its preferred port for future launches.
Copy the actual endpoint from Local API. A one-time notice appears when it changes. All examples here assume the default port. Changing your preferred port takes effect after restarting Noullama.
The managed llama-server uses 11436. Both services bind to localhost. Connect integrations to the gateway, not the private runtime port.
Available endpoints
POST /v1/systemone- Native decision request containing state and questions.
POST /v1/chat/completions- OpenAI-compatible adapter for a native decision request.
GET /v1/models- Model listing for clients.
GET /health- Gateway health endpoint.
Native System One request
Load a decision model before sending a request. The state describes the input and the questions define what to decide.
curl http://127.0.0.1:11435/v1/systemone \
-H 'Content-Type: application/json' \
-d '{
"state": "I was charged twice. Please refund the duplicate payment.",
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {"billing": "Charges and refunds", "technical": "App errors"}
},
"refund": {"type": "noul", "instructions": "Is the customer asking for a refund?"}
}
}'Use the OpenAI adapter
With the OpenAI Python SDK installed, point the client at your gateway’s /v1 base URL. Send one user message containing the JSON object with state and questions. The assistant message contains the native decision result as JSON.
import json
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:11435/v1", api_key="local")
request = {
"state": "I was charged twice. Please refund the duplicate payment.",
"questions": {
"refund": {"type": "noul", "instructions": "Is the customer asking for a refund?"}
},
}
response = client.chat.completions.create(
model="noullama",
messages=[{"role": "user", "content": json.dumps(request)}],
stream=False,
)
print(json.loads(response.choices[0].message.content)["answers"])The SDK accepts api_key="local" as a placeholder. The gateway itself does not require an API key for local SDK or curl clients.
Local access
The gateway accepts requests addressed to 127.0.0.1 or localhost on its active port and rejects foreign browser origins. It is not a remote public endpoint.
The private llama-server uses a temporary key generated for each model load. Keep your integration on the gateway address shown in Local API.
Limits and image input
- The adapter does not support chat history, tools, streaming or arbitrary chat prompts. Use
stream=False. - Multi-select, extraction, estimates, boxes and video are not supported by this integration.
- Requests through the gateway are limited to 16 MB.
- Native clients may supply an
imagesarray of base64 image data URLs when the model is loaded with its projector.
Base64 adds overhead to the original image size. Keep the complete JSON request within the gateway limit, even though the desktop app has different image limits.