omnismart-personas
Role-based, data-scoped LLM persona templates + router for production analytics
copilots. The pattern behind IntelAI's 9-persona RAG copilot, extracted as a tiny,
zero-dependency, pure-Python library.
A persona pairs a system prompt with a data-access scope (which business domains it may see) and a sampling temperature — so the same retrieval system can answer through different role-conditioned prompts and data filters ("persona-routed RAG").
Install
pip install omnismart-personas
Use
from omnismart_personas import persona_for_role, scope_records, build_rag_prompt
persona = persona_for_role("cfo") # → CFO persona (scope: Finance, Growth)
persona.can_access("People") # False — out of scope
rows = [
{"category": "Finance", "metric": "gross_margin", "value": 0.42},
{"category": "People", "metric": "headcount", "value": 220},
]
visible = scope_records(persona, rows) # drops the People row
prompt = build_rag_prompt(
persona,
"What drove the Q1 gross-margin change?",
[f"{r['metric']}={r['value']}" for r in visible],
language="en",
)
# → send `prompt` to any LLM
API
list_personas()→ the 9 persona keysget_persona(name)/persona_for_role(role)→ aPersonaPersona(name, display_name, system_prompt, allowed_tools, data_access, temperature)— immutable;.can_access(domain)scope_records(persona, records, domain_key="category")→ records in scopebuild_system_prompt(persona, *, language="en", extra=None)build_rag_prompt(persona, query, snippets, *, language="en")
Personas: ceo, cfo, cto, coo, chro, esg, risk, analyst, general.
LangChain
Use the personas in any LangChain RAG chain — pip install "omnismart-personas[langchain]":
from omnismart_personas import persona_for_role
from omnismart_personas.langchain import persona_chat_prompt, persona_retriever_filter
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
persona = persona_for_role("cfo")
prompt = persona_chat_prompt(persona) # system = scope; {context} + {question}
chain = prompt | ChatOpenAI(model="gpt-4o-mini") | StrOutputParser()
docs = persona_retriever_filter(persona, retriever.invoke(q)) # RBAC on retrieved docs
answer = chain.invoke({"context": "\n".join(d.page_content for d in docs), "question": q})
persona_retriever_filter drops Documents whose metadata["category"] is outside the
persona's data_access scope — the same role boundaries, enforced in your LangChain pipeline.
Test
pip install -e ".[test]" && pytest
MIT licensed. Part of the IntelAI project.
⚖️ License & Enterprise Use (Dual-License)
This project is open-source under the AGPL-3.0 License. It is completely free for researchers, students, and open-source hobbyists.
Commercial Use: The AGPLv3 license requires that any proprietary network service (SaaS, internal corporate tools) that uses or modifies this code must also open-source its entire backend.
If you wish to use this framework in a closed-source commercial environment, or require Enterprise features (SSO, Active Directory, Custom VPC Deployment, Strict RBAC), you must obtain a Commercial License. Please reach out to discuss commercial licensing and integration consulting.
📡 Anonymous Telemetry
This project collects anonymous, GDPR-compliant startup pings to help the author understand usage volume and prioritize development.
- What is collected: Only the project name and a "startup" event timestamp. No PII, no API keys, no user data.
- How to disable: We respect your privacy. To opt-out, simply set
TELEMETRY_OPT_OUT=truein your.envfile.
Licensing
This project is licensed under the AGPL-3.0 License.
Commercial Use: If you wish to use this software commercially without releasing your own source code, please see COMMERCIAL.md to obtain a commercial license.
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 omnismart_personas-0.1.3.tar.gz.
File metadata
- Download URL: omnismart_personas-0.1.3.tar.gz
- Upload date:
- Size: 8.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7aeea6129573916873e3622718b097f7c19cb2ad46751bdc1c38a44475a957ab
|
|
| MD5 |
bcc6edbf200409eb29b263d0407f5b86
|
|
| BLAKE2b-256 |
3c28640e66df7814e5d82f7126ff44d9c9410a6adbc7b1255659638c6190a034
|
File details
Details for the file omnismart_personas-0.1.3-py3-none-any.whl.
File metadata
- Download URL: omnismart_personas-0.1.3-py3-none-any.whl
- Upload date:
- Size: 9.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22971b7573739327e442bdb45732cf55e32fdd16aaada1642e6f1c827a6fa99a
|
|
| MD5 |
90f5ef73392b36f1af5c038204ff990d
|
|
| BLAKE2b-256 |
87a2566a1b7578687b4ab7b5beaf5c0f8c4fe742bf8438d22c4184e1d6e39659
|