ConlangCrafter: Constructing Languages with a Multi-Hop LLM Pipeline

jbotz1 pts1 comments

GitHub - morrisalp/ConlangCrafter: Constructing languages with LLMs, based on the ACL 2026 (Oral) paper: "ConlangCrafter: Constructing Languages with a Multi-Hop LLM Pipeline" · GitHub

/" data-turbo-transient="true" />

Skip to content

Search or jump to...

Search code, repositories, users, issues, pull requests...

-->

Search

Clear

Search syntax tips

Provide feedback

--><br>We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Cancel

Submit feedback

Saved searches

Use saved searches to filter your results more quickly

-->

Name

Query

To see all available qualifiers, see our documentation.

Cancel

Create saved search

Sign in

/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up

Appearance settings

Resetting focus

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

morrisalp

ConlangCrafter

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star<br>17

main

BranchesTags

Go to file

CodeOpen more actions menu

Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit

History<br>19 Commits<br>19 Commits

configs

configs

prompts

prompts

src

src

.env.example

.env.example

.gitignore

.gitignore

.python-version

.python-version

LICENSE

LICENSE

README.md

README.md

pyproject.toml

pyproject.toml

requirements.txt

requirements.txt

uv.lock

uv.lock

View all files

Repository files navigation

ConlangCrafter: Constructing Languages with a Multi-Hop LLM Pipeline (ACL 2026 Oral)

Project Page: conlangcrafter.github.io

Paper: arxiv.org/abs/2508.06094

Dataset: huggingface.co/datasets/malper/ConlangCrafter — 64 generated languages

We introduce a fully automated system for constructing languages (conlangs) using large language models. Our multi-stage pipeline creates coherent, diverse artificial languages with their own phonology, grammar, lexicon, and translation capabilities.

Quick Start

Install dependencies:

pip install -r requirements.txt<br># or: uv sync if using uv

Set up API keys — copy .env.example to .env and add keys for whichever APIs you will use:

Google Gemini : GOOGLE_API_KEY — Google AI Studio

OpenAI : OPENAI_API_KEY — OpenAI API Keys

DeepSeek (via Together) : TOGETHER_API_KEY — Together AI

Generate a language sketch (default model: gemini-2.5-pro):

python src/run_pipeline.py<br># or: uv run src/run_pipeline.py

Configuration

Run python src/run_pipeline.py --help to see all options. Key flags:

python src/run_pipeline.py \<br>--model gemini-2.5-pro \<br>--custom-constraints "The language has only 3 vowels" \<br>--temperature 0.8 \<br>--qa-disabled # QA self-refinement loops are on by default; use this to turn it off

To resume a previous run (e.g. starting from grammar after phonology completed):

--steps grammar,lexicon">python src/run_pipeline.py --language-id id> --steps grammar,lexicon

Supported models are:

Google Gemini (e.g., gemini-2.5-pro, gemini-1.5-flash)

OpenAI models (e.g., o4-mini, gpt-4o, gpt-5)

DeepSeek via Together AI (e.g., deepseek-ai/DeepSeek-R1)

Pregenerated language sketches

You can load pregenerated language sketches from our dataset in this pipeline's format with this script:

python src/load_hf_languages.py

Translation

Translation is not run by default. To translate into a generated language, run the translation step separately. By default it translates the 10 sentences in configs/sentences_default.txt:

--steps translation">python src/run_pipeline.py --language-id id> --steps translation

To translate a single custom sentence instead:

--steps translation --translation-sentence "Hello, world!"">python src/run_pipeline.py --language-id id> --steps translation --translation-sentence "Hello, world!"

Pass --translation-sketch-update to feed new vocabulary and grammar rules introduced during translation back into the sketch for each subsequent sentence, expanding the language as translation proceeds (constructive translation).

Improvements

This implementation includes minor improvements to the system used for results from our paper:

QA loop : Degenerate outputs (e.g. JSON instead of text) are detected and skipped inline, rather than post-hoc rejection sampling.

QA amend prompt : Prompt wording is slightly adjusted for consistency with our system.

Citation

@article{conlangcrafter2025,<br>title={ConlangCrafter: Constructing Languages with a Multi-Hop LLM Pipeline},<br>author={Morris Alper and Moran Yanuka and Raja Giryes and Ga{\v{s}}per Begu{\v{s}}},<br>year={2025},<br>eprint={2508.06094},<br>archivePrefix={arXiv},<br>primaryClass={cs.CL},<br>url={https://arxiv.org/abs/2508.06094}

License

This project is licensed under the MIT License — see the LICENSE file for details.

About

Constructing languages with LLMs, based on the ACL 2026 (Oral) paper:...

translation language languages python conlangcrafter constructing

Related Articles