Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aris_sdk-0.1.4.tar.gz (18.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aris_sdk-0.1.4-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

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

Hashes for aris_sdk-0.1.4.tar.gz
Algorithm Hash digest
SHA256 e598de06e1d7d109e09fb48f75c4197cb567a2cacab322129d38d72a35003add
MD5 75dc213627151839a31eeb28489786d7
BLAKE2b-256 3e1bef01b4396eef5d428fe3c590cf14c08cb33ff9c48dd73926910f81cc0ed4

See more details on using hashes here.

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

Hashes for aris_sdk-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 f701fcf88247e965b25a8b89a05f08d0f63d625883e6760f49eb175e307ad41c
MD5 480c277edba8e14f3064e9b9e758da8e
BLAKE2b-256 1c979f2ea24b5a45ce1430c731f8af3e702ba83d3b3ed28675b588adff2cc0bc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page