[build-system] requires = ["setuptools>=68", "wheel"] build-backend = "setuptools.build_meta" [project] name = "chakravyuh" version = "0.3.0" description = "Multi-agent OpenEnv RL environment for Indian UPI fraud detection — diagnoses + fixes reward hacking in RLHF (v1 100%/36% FPR → v2 99.3%/6.7%)" readme = "README.md" requires-python = ">=3.10,<3.13" license = { text = "MIT" } authors = [ { name = "Ujjwal Pardeshi" }, { name = "Chakravyuh Team" } ] keywords = [ "reinforcement-learning", "multi-agent", "fraud-detection", "openenv", "llm", "grpo", "lora", "qwen", "rlhf", "reward-hacking", "ai-safety", "red-team", "upi", "india", "scam-detection", ] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering :: Artificial Intelligence", ] # Core dependencies are deliberately lightweight so the OpenEnv server # (HF Space) can build a small image. Torch / transformers / # sentence-transformers move into the [llm] / [train] extras below. dependencies = [ "pydantic>=2.6", "numpy>=1.26", "python-dotenv>=1.0", "tqdm>=4.66", "jsonlines>=4.0", "openenv-core>=0.2.3,<0.3", "fastapi>=0.115", "uvicorn>=0.30", ] [project.optional-dependencies] llm = [ "torch>=2.5,<2.6", "transformers>=4.45,<4.50", "sentence-transformers>=2.7", "peft>=0.13", "trl>=0.12", "accelerate>=0.33", "bitsandbytes>=0.44", "datasets>=2.19", "wandb>=0.17", ] demo = [ "gradio>=5.0", ] train = [ "unsloth", "vllm>=0.6", ] eval = [ "scipy>=1.13", "pandas>=2.2", "matplotlib>=3.9", ] frontier = [ # OpenAI-compatible: works for OpenAI + Groq + other compat providers "openai>=1.40", # Anthropic Claude "anthropic>=0.39", # Google Gemini "google-generativeai>=0.8", ] dev = [ "pytest>=8.0", "pytest-cov>=5.0", "ruff>=0.6", "mypy>=1.11", ] [project.urls] Homepage = "https://huggingface.co/spaces/ujjwalpardeshi/chakravyuh" Repository = "https://github.com/UjjwalPardeshi/Chakravyuh" Documentation = "https://github.com/UjjwalPardeshi/Chakravyuh#readme" Changelog = "https://github.com/UjjwalPardeshi/Chakravyuh/releases" Issues = "https://github.com/UjjwalPardeshi/Chakravyuh/issues" "HF Space (live demo)" = "https://ujjwalpardeshi-chakravyuh.hf.space" "HF Hub Model (Analyzer v2)" = "https://huggingface.co/ujjwalpardeshi/chakravyuh-analyzer-lora-v2" "HF Hub Dataset (bench-v0)" = "https://huggingface.co/datasets/ujjwalpardeshi/chakravyuh-bench-v0" [project.scripts] # The OpenEnv validator (`openenv validate .`) requires the key to be # exactly ``server`` and the target to end in ``:main``. This makes # `uv run --project . server` and `openenv serve .` both work. server = "server.app:main" [tool.setuptools.packages.find] where = ["."] include = ["chakravyuh_env*", "server*", "training*", "eval*"] [tool.ruff] line-length = 100 target-version = "py310" [tool.ruff.lint] select = ["E", "F", "I", "N", "W", "B", "UP"] ignore = ["E501"] [tool.pytest.ini_options] testpaths = ["tests"] python_files = ["test_*.py"] addopts = "-v --tb=short" markers = [ "unit: fast, no external dependencies", "integration: slower, multi-component", ] # OpenEnv integration: ``openenv-core>=0.2.3`` pinned in dependencies above. # Entry: ``chakravyuh_env.ChakravyuhOpenEnv`` / ``server.app:app``.