The missing protocol between user requests and AI actions. Standardized intent parsing for every AI system.
Project description
⟁ Null Lens
The missing protocol between user requests and AI actions.
Standardized intent parsing for every AI system.
Converts any input into a deterministic schema — [Motive] [Scope] [Priority].
🧩 What it does
Null Lens turns unstructured natural-language input into a fixed three-line intent block:
[Motive] — what the user wants to achieve
[Scope] — where the request applies (context or domain)
[Priority] — what must be done first or resolved
One ambiguous paragraph in → three structured fields out.
⚙️ Quick Start
Install
pip install null-lens
Get your API key
You’ll need an API key to use Lens.
→ https://null-core.ai → sign up → get 100 free queries instantly.
No credit card. No approval delay.
export NULL_LENS_API_KEY="your_api_key_here"
# or on Windows PowerShell
setx NULL_LENS_API_KEY "your_api_key_here"
Use
from null_lens import NullLens
lens = NullLens(api_key="your_api_key_here")
result = lens.parse("Summarize Q4 strategy across LATAM markets.")
print(result)
Response
[Motive] Summarize strategic direction for Q4
[Scope] LATAM markets
[Priority] Identify key actions for planning cycle
🧠 Why it matters
AI systems don’t fail at inference — they fail at interpretation. Lens removes ambiguity before reasoning begins.
Without Lens
- Prompt retries
- Context drift
- RAG scaffolding debt
With Lens
- Stable input schema
- Consistent reasoning
- Deterministic orchestration
🔌 API Access
Endpoint
POST https://null-core.ai/api/lens
Headers
Authorization: Bearer <API_KEY>
Content-Type: application/json
Body
{
"messages": [
{
"role": "user",
"content": "Summarize the latency impact of our RAG pipeline for 100k qps"
}
]
}
Response
{
"object": "chat.completion",
"org_id": "xxxx-xxxx-xxxx",
"response": "[Motive] Identify latency impact of RAG pipeline\n[Scope] RAG pipeline, 100k QPS scenario\n[Priority] Optimize for performance stability"
}
🧩 Parsing Helpers
JavaScript
function parseLensResponse(responseText) {
const lines = responseText.split(/\r?\n/).map(l => l.trim()).filter(Boolean);
const find = (prefix) => {
const line = lines.find(l => l.toLowerCase().startsWith(prefix));
return line ? line.split(']').slice(1).join(']').trim() : null;
};
return {
motive: find('[motive]'),
scope: find('[scope]'),
priority: find('[priority]')
};
}
Python
def parse_lens_response(text):
lines = [l.strip() for l in text.splitlines() if l.strip()]
def find(prefix):
for l in lines:
if l.lower().startswith(prefix):
return l.split(']', 1)[1].strip()
return None
return {
"motive": find("[motive]"),
"scope": find("[scope]"),
"priority": find("[priority]")
}
🧩 Example cURL
curl -X POST https://null-core.ai/api/lens \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{"messages":[{"role":"user","content":"We migrated API to v2 and uptime dropped — logs show auth timeouts. Root cause & mitigation before Friday?"}]}'
🧠 Best Practices
- One call per semantic input — send full text in
messages[0].content. - Persist outputs — store Motive / Scope / Priority as fields in your DB.
- Cache identical inputs — identical input → identical output.
- Use Lens before RAG / agents — treat its output as your canonical intent layer.
- Test with messy inputs — long emails, transcripts, logs; the schema holds.
🔐 Security & Compliance
- Stateless — no inputs stored or retained.
- You manage your own API keys.
- Rotate keys if compromised.
- Don’t send confidential or PII data unless necessary.
- Provided as-is, without warranties; you own compliance and handling.
❓ FAQ
Q: Is Lens stateful? A: No — each call is independent. Inputs are transient and not stored.
Q: Is the output deterministic? A: Yes. Same input → same 3-line output. Determinism by design.
Q: Will the format ever change?
A: Never. The [Motive] / [Scope] / [Priority] schema is permanent.
Q: Average latency? A: ~1–5 s per call, depending on region and load.
Q: Enterprise pricing? A: Contact support@null-core.ai for volume or dedicated environments.
🩶 License
MIT License — see LICENSE
API-first. Stateless. Deterministic. Every call, every time.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file null_lens-0.1.0.tar.gz.
File metadata
- Download URL: null_lens-0.1.0.tar.gz
- Upload date:
- Size: 5.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
384b3008afc0d000097077fb2d1f4028d869f2d9e594e84bc8e785bdd473db02
|
|
| MD5 |
45c8135e5efeb8563c6dad056fc77950
|
|
| BLAKE2b-256 |
9b9f31676c8fecd81b550a4a026b9de3cfc06bbef518ee7ba78575a169584679
|
File details
Details for the file null_lens-0.1.0-py3-none-any.whl.
File metadata
- Download URL: null_lens-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7db555289cdc371feaf6405f6123e253bb38c9c03ac69943124073b74e89edf
|
|
| MD5 |
22159e11d15c065d1ed74f907a77b954
|
|
| BLAKE2b-256 |
381b3639de1b78ffcda73453c0534c196993672888994a75faef40223e167676
|