Skip to content

Polyvor-Labs/AdiLin

Repository files navigation

AdiLin

AdiLin adalah prototype AI decision-support untuk analisis awal hukum pidana Indonesia. Sistem ini membantu mencari pasal relevan, memeriksa unsur pidana secara heuristik, menampilkan sumber hukum, dan menyusun analisis awal yang tetap wajib divalidasi manusia.

AdiLin bukan pengganti advokat, jaksa, hakim, atau penasihat hukum. Output aplikasi tidak boleh dipakai sebagai vonis, keputusan hukum final, atau dasar tunggal untuk tindakan hukum nyata.

Dataset

Basis data AdiLin diambil dari dokumen PP, UU, UUD, dan UUDRT periode 1945-2023.

Sumber dataset: law-indonesia-pdf di Kaggle.

Features

  • Retrieval pasal hukum menggunakan index TF-IDF lokal.
  • Parsing PDF peraturan menjadi record pasal dan fallback chunk.
  • Ekstraksi awal unsur pidana dan ancaman pidana berbasis rule engine.
  • Provider LLM: Gemini, Groq, Ollama, dan fallback extractive.
  • Rotasi Gemini API key melalui GEMINI_API_KEYS atau apikey_gemini.txt.
  • Backend API-only untuk deployment server.
  • Frontend statis terpisah untuk Vercel.

Project Structure

.
├── backend/                 Backend HTTP API
├── frontend/                Frontend statis untuk Vercel
├── src/adilin/             Core package: parser, retriever, reasoner, providers
├── scripts/                 Script import dataset, build dataset, build index, CLI
├── tests/                   Unit tests
├── docs/                    Dokumentasi teknis tambahan
├── data/                    Lokasi dataset dan index lokal
├── requirements.txt         Dependency backend
├── pyproject.toml           Konfigurasi project dan pytest
└── .env.example             Contoh environment variable

Backend Setup

Gunakan Python 3.10 atau lebih baru.

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env

Untuk Windows PowerShell:

python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env

Jalankan backend API:

python backend/server.py --host 127.0.0.1 --port 37990

Health check:

curl http://127.0.0.1:37990/health

Frontend Setup

Frontend berada di folder frontend/ dan tidak memerlukan build step.

cd frontend
npm run check
npm run dev

Local preview tersedia di:

http://127.0.0.1:5173

Secara default local dev server dan konfigurasi Vercel mem-proxy /api/* ke backend:

http://127.0.0.1:37990

Jika backend production berubah, update frontend/vercel.json. Untuk local preview, gunakan environment ADILIN_BACKEND_URL jika backend berjalan di host atau port lain.

API

GET /health

Response:

{
  "ok": true,
  "service": "AdiLin"
}

POST /api/analyze

Request:

{
  "case_text": "Pelaku mengambil motor korban tanpa izin lalu menjualnya.",
  "provider": "gemini",
  "top_k": 5,
  "decision_mode": true
}

Provider yang tersedia:

extractive
gemini
groq
ollama

Response ringkas:

{
  "ok": true,
  "result": {
    "answer": "...",
    "decision": {
      "label": "...",
      "citation": "...",
      "severity": "ok"
    },
    "sources": []
  }
}

Provider Configuration

Gemini:

ADILIN_LLM_PROVIDER=gemini
GEMINI_API_KEY=isi_api_key
GEMINI_MODEL=gemini-2.5-flash-lite

Multi-key Gemini dapat memakai environment:

GEMINI_API_KEYS=key1,key2,key3

Atau file lokal :

apikey_gemini.txt

Format:

key_gemini_pertama
key_gemini_kedua
key_gemini_ketiga

Jika satu key terkena quota atau rate-limit, provider Gemini otomatis mencoba key berikutnya.

Groq:

ADILIN_LLM_PROVIDER=groq
GROQ_API_KEY=isi_api_key
GROQ_MODEL=llama-3.1-8b-instant

Ollama:

ADILIN_LLM_PROVIDER=ollama
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=qwen2.5:7b

Dataset Build

Import ZIP dataset:

python scripts/00_import_zip.py --zip "Dataset Undang-Undang.zip" --out data/raw_imported

Build dataset pasal dan unsur:

python scripts/01_build_dataset.py \
  --input data/raw_imported \
  --out data/processed/legal_articles.jsonl \
  --elements data/processed/legal_elements.jsonl

Build index:

python scripts/02_build_index.py \
  --dataset data/processed/legal_articles.jsonl \
  --index data/index/tfidf

Test CLI:

python scripts/03_query_cli.py \
  --provider extractive \
  --query "Pelaku mengambil motor korban tanpa izin lalu menjualnya."

Decision simulation:

python scripts/05_decision_cli.py \
  --provider extractive \
  --case "Pelaku mengambil motor korban di parkiran tanpa izin. Ada saksi dan rekaman CCTV."

Tests

pytest

License

Lihat LICENSE.

Developed by Polyvor Labs.

Releases

No releases published

Packages

 
 
 

Contributors