Decentralized AI Network SDK and Node Infrastructure
Project description
BidSmith — Federal RFP Intelligence Platform
by ARIS Labs · bidsmith.pro
AI-powered audit engine for government contractors. Instant compliance matrix, FAR/DFARS risk flags, and bid/no-bid recommendation from any SAM.gov link or PDF.
Quick Start
Golden Run — one command to start everything
npm run dev & npm start
npm run dev— Vite dev server on :5173 (hot-reload, proxies/api→ :8080)npm start— Express API server on :8080
Note: This is a Vite + React frontend with an Express.js API backend. There is no Python/uvicorn server. The API lives in
api/index.js.
Environment
Copy .env.example to .env and fill in:
OPENROUTER_API_KEY= # LLM inference
VITE_CLERK_PUBLISHABLE_KEY= # Auth
CLERK_SECRET_KEY=
SAM_GOV_API_KEY= # Optional — SAM.gov enrichment
Bento Dashboard
The intelligence dashboard lives at /bento. It provides:
| Card | Route wired |
|---|---|
| RFP Upload Zone | POST /api/audit/pdf · POST /api/audit/link |
| Live Analysis (confidence scores + citations) | Reactive to upload result |
| Bid Brief + Copy to Clipboard | Reactive to upload result |
| Eval Status (5 dots, live poll) | GET /api/evals/status |
Inference Regression Testing (Evals)
Run the Golden Set against the live API before shipping any prompt or RAG change.
Run evals (local)
python scripts/run_evals.py
Run against production
EVAL_API_URL=https://bidsmith.pro python scripts/run_evals.py
Save a baseline (do this after a known-good state)
python scripts/run_evals.py --baseline
Compare against baseline (regression check)
python scripts/run_evals.py --compare --verbose
CI gate (exits 1 if overall fails)
python scripts/run_evals.py || echo "REGRESSION DETECTED — do not ship"
Output
Results are written to tests/eval_results.json and immediately reflected in the /bento dashboard Eval Status card (polls every 30 seconds).
The 5 Golden Evals
| # | Label | Tests |
|---|---|---|
| 1 | SHALL vs WILL Compliance Extraction | Parsing precision — must distinguish SHALL, WILL, ambiguous |
| 2 | Bid/No-Bid Under Competing Constraints | Reasoning under conflicting eligibility signals |
| 3 | Cross-Section Requirement Conflict | Cross-document reasoning, FAR section hierarchy |
| 4 | NIST SP 800-53 Scope Interpretation | Domain knowledge depth (cybersecurity controls) |
| 5 | Teaming Agreement Compliance | FAR 52.219 limitation on subcontracting, affiliation risk |
Rule: If any eval regresses below its min_keyword_score, do not ship.
API Endpoints
| Method | Path | Description |
|---|---|---|
POST |
/api/audit/pdf |
Upload PDF → full audit result |
POST |
/api/audit/link |
SAM.gov URL → full audit result |
POST |
/api/audit/text |
Raw text → full audit result (used by evals) |
GET |
/api/evals/status |
Serves tests/eval_results.json to the dashboard |
GET |
/api/health |
API + provider key status |
POST |
/api/chat |
Follow-up chat with audit context |
Audit Pipeline — 3 Logged Stages
Every /api/audit/pdf and /api/audit/link call emits structured JSON logs:
stage: 1_retrieval — PDF parse or SAM.gov fetch
stage: 2_chunking — Text preparation and size estimation
stage: 3_inference — 3-agent LLM pipeline (Extractor → Auditor → Strategist)
Search logs for "audit_stage" to trace any request end-to-end.
Error format
All API errors return consistent JSON:
{ "error": "Human-readable message", "code": 422 }
Project Structure
aris-core/
├── api/ # Express.js API
│ ├── agents/ # 3-agent pipeline (coordinator, extractor, auditor, strategist)
│ ├── services/ # SAM.gov, analytics, waitlist, stripe
│ ├── utils/ # logger, tracing, mailer, asyncHandler
│ └── index.js # Entry point, all routes
├── src/ # Vite + React frontend
│ ├── components/
│ │ └── bento/ # Bento dashboard components
│ │ ├── RfpUploadZone.jsx
│ │ ├── LiveAnalysisCard.jsx
│ │ ├── BidOutputCard.jsx
│ │ └── EvalStatusCard.jsx
│ └── pages/
│ ├── BentoDashboard.jsx # /bento
│ └── GovConDashboardV2.jsx # /app (full chat UI)
├── scripts/
│ └── run_evals.py # Inference regression tester
└── tests/
├── evals.json # Golden Set definitions
└── eval_results.json # Latest run output (auto-generated)
Deployment
Deployed on Railway (API + static). Primary CI is .github/workflows/ci.yml.
# Build
npm run build
# Preview build locally
npm run preview
Force Railway rebuild — see railway.json for config.
Aris registry & Python SDK (optional)
This repository also ships the aris-sdk Python package: a small registry + worker-node stack for decentralized LLM sessions (ai.generate, ai.chat), balance/usage APIs, and JWT handshakes. It does not replace the Node API above; it lives alongside it for experimentation and PyPI distribution.
Install (library)
pip install aris-sdk
Quick example
from aris.client import Aris
client = Aris(api_key="aris_live_...")
print(client.generate("Why is the ocean salty?"))
print(client.chat([{"role": "user", "content": "Capital of France?"}])["content"])
Run registry + worker locally
See .env.example (section Aris registry / Python SDK) and CONTRIBUTING.md. Pytest targets aris/tests/ and runs in .github/workflows/aris-python-ci.yml when Python paths change.
Published package metadata still uses this README; keep both sections accurate.
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 aris_sdk-0.1.4.tar.gz.
File metadata
- Download URL: aris_sdk-0.1.4.tar.gz
- Upload date:
- Size: 18.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e598de06e1d7d109e09fb48f75c4197cb567a2cacab322129d38d72a35003add
|
|
| MD5 |
75dc213627151839a31eeb28489786d7
|
|
| BLAKE2b-256 |
3e1bef01b4396eef5d428fe3c590cf14c08cb33ff9c48dd73926910f81cc0ed4
|
File details
Details for the file aris_sdk-0.1.4-py3-none-any.whl.
File metadata
- Download URL: aris_sdk-0.1.4-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.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f701fcf88247e965b25a8b89a05f08d0f63d625883e6760f49eb175e307ad41c
|
|
| MD5 |
480c277edba8e14f3064e9b9e758da8e
|
|
| BLAKE2b-256 |
1c979f2ea24b5a45ce1430c731f8af3e702ba83d3b3ed28675b588adff2cc0bc
|