simple_module_ai
AI base module for SimpleModule apps: one provider-configurable service layer (chat + embeddings) that every other module shares, with DB-backed settings, encrypted keys and an admin page.
The module owns connection configuration — provider, endpoint, key, model name. Consuming modules own behaviour — agents, prompts, temperature, retries, streaming.
Install
pip install simple_module_ai
Add simple_module_ai to your host's dependencies; it is discovered at boot
via the simple_module entry point. There are no tables and no migrations.
Usage (consuming from another module)
Declare the dependency in your module's ModuleMeta:
meta = ModuleMeta(name="MyModule", depends_on=["Ai"], ...)
Then resolve connections wherever you need them:
from pydantic_ai import Agent
from sm_ai.contracts import AiNotConfiguredError, resolve_model, resolve_embedder
agent = Agent(instructions="...", output_type=MySchema)
result = await agent.run(text, model=resolve_model())
embedder = resolve_embedder() # raises AiNotConfiguredError until the
result = await embedder.embed_documents(chunks) # embedding slot is set up
resolve_model(model_name=...) overrides the configured model name for
same-endpoint multi-model setups. embedding_dim() returns the configured
vector width. All errors subclass AiError.
The import package is
sm_ai, notai— the bare name belongs to another PyPI project and would collide in hosts that install it.
Settings
Two slots — chat and embeddings — each with provider (anthropic, openai,
google, openai_compatible), model, base URL and API key. The
openai_compatible provider covers vLLM, Ollama and LM Studio (base URL
required; a blank key is replaced by a protocol-satisfying placeholder).
Configure at /ai/ (permission ai.manage) or seed via SM_AI_* env vars
(e.g. SM_AI_CHAT_MODEL); DB values win over env. API keys are encrypted at
rest with a key derived from SM_SECRET_KEY — rotating that secret means
re-entering provider keys (the old ciphertexts surface as unreadable). A
settings save hot-reloads the worker that handled it; other workers pick
the change up on restart.
Routes
| Route | Purpose |
|---|---|
GET /ai/ |
admin settings page |
GET/PUT /api/ai/settings |
read (secrets masked) / update |
POST /api/ai/test |
probe the chat or embedding slot |
Writes require an X-CSRF-Token header bound to the session (the admin page
sends it automatically; the token is mirrored to the sm_ai_csrf cookie).
Metadata
Release files for simple-module-ai 0.0.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| simple_module_ai-0.0.9.tar.gz | 29.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| simple_module_ai-0.0.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 60.9 kB
Release files / simple_module_ai-0.0.9.tar.gz
| Download URL | simple_module_ai-0.0.9.tar.gz |
|---|---|
| Size | 29.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
11673221ed0c297fdba6bfcb11e6b280aba130964ae7b11a23132df92d9b9480
|
|
BLAKE2b-256 checksum How to use checksums |
8e5cbaaada55e04e7f2fb77d1d1668fc51fb44438238d65fee608782d3ce8b15
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / simple_module_ai-0.0.9-py3-none-any.whl
| Download URL | simple_module_ai-0.0.9-py3-none-any.whl |
|---|---|
| Size | 31.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f755ba2a72b499ba53bfddb5a301504799c47506fbc7941c993ca9a5c8a57508
|
|
BLAKE2b-256 checksum How to use checksums |
35b521432ea7d4897609ac372861607cd6842ad4ae0b5ecc08f5e68ee5f6fea3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency log