[project] name = "moral-maps" version = "0.1.0" description = "Moral and value maps for LLMs: World Values Survey, MFQ-2, Big Five, 16PF, humor styles, and moral vignettes, scored from answer probabilities (local) or rated sampling (API) and compared to human country norms. Built for steering work." requires-python = ">=3.11" dependencies = [ "transformers>=5.7", "torch", "pandas", "loguru", "tqdm", "tabulate", "numpy", ] [project.optional-dependencies] # moralmaps.maps (culture-map + range viz) only; `import moralmaps` and the evals stay headless, # numeric-only consumers (steering-lite) skip this. Install with `pip install moral-maps[maps]`. maps = [ "matplotlib>=3.8", "shapely>=2.0", # union of per-country discs into one merged zone region ] # label placement is in-repo (moralmaps.labelplace); no textalloc/adjustText dep # moralmaps.read_api (sampling readout for logprob-less API models) only. Install with # `pip install moral-maps[api]`. The local logprob reader (read.py) needs none of this. api = [ # robust OpenRouter calls (stamina backoff on 429/provider/upstream/malformed errors) -- # wassname's wrapper, so retry/rate-limit handling doesn't diverge from the rest of the stack. "openrouter-wrapper @ git+https://github.com/wassname/openrouter_wrapper", "python-dotenv", ] [dependency-groups] dev = [ "scipy>=1.17.1", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.metadata] allow-direct-references = true # the api extra pulls openrouter_wrapper straight from git [tool.hatch.build.targets.wheel] packages = ["src/moralmaps"]