{"adoption": {"forks": 1217, "observed_at": "2026-08-28T04:10:49.640514+00:00", "stars": 11745}, "canonical_url": "https://ross.abutalabs.com/products/ludwig", "card": {"archived": false, "artifact_type": "framework", "description": "Low-code framework for building custom LLMs, neural networks, and other AI models", "domain": ["machine-learning", "deep-learning", "large-language-models", "computer-vision", "data-science"], "enriched": true, "function": ["machine-learning", "deep-learning", "llm-training", "llm-inference", "nlp", "computer-vision", "data-science", "cli"], "health_score": 100, "homepage": "http://ludwig.ai", "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["ludwig-ai/ludwig"], "name": "ludwig-ai/ludwig", "platform": ["python", "cli"], "pushed_at": "2026-08-24T21:24:13+00:00", "repo": "ludwig-ai/ludwig", "stars": 11745, "tags": ["declarative-ml", "yaml-config", "fine-tuning", "lora", "peft", "qlora", "pytorch", "ray", "distributed-training", "multimodal", "low-code", "huggingface", "natural-language-processing", "linux", "macos", "docker", "kubernetes", "gpu"], "topics": ["deep-learning", "deeplearning", "deep", "learning", "machine-learning", "machinelearning", "natural-language-processing", "natural-language", "computer-vision", "data-centric", "data-science", "pytorch", "neural-network", "ml", "llm", "llm-training", "fine-tuning", "llama", "mistral", "llama2"], "urls": [], "use_cases": ["fine-tune llama or mistral on my own data with lora", "train a classifier from a csv without writing training code", "build custom llms with a yaml config", "fine-tune a vision-language model like llava", "run distributed deep learning training on ray or kubernetes", "do hyperparameter optimization for a neural network", "train a model on tabular, text, and image features together", "export a trained model to torchscript or triton for serving"], "what_it_is": "Ludwig is a declarative, low-code deep learning framework for training, fine-tuning, and deploying AI models — from LLMs to tabular, image, audio, and time-series models — using YAML configuration files instead of boilerplate Python. Built on PyTorch with Ray-based distributed training, it supports PEFT/LoRA fine-tuning, multi-task and multimodal learning, and production export to TorchScript and Triton.", "when_to_avoid": ["you need full low-level control over every training detail and prefer raw PyTorch", "you want a lightweight inference-only library rather than a training framework", "your project requires Python versions below 3.12", "you need a no-code GUI tool rather than config-driven workflows"], "when_to_choose": ["you want to train or fine-tune models without writing training loops", "you need LLM fine-tuning with PEFT adapters like LoRA or QLoRA", "you want declarative, reproducible ML pipelines validated by config schemas", "you need multi-task or multimodal models mixing tabular, text, image, and audio features", "you want to scale training across GPUs with Ray, DDP, or DeepSpeed"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ludwig", "repo": "ludwig-ai/ludwig", "role": "main", "score": 99}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:10:49.640514+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:15:21.407552+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "046a073f7e12f9d25fd0ae7c1d76fa30654d4201d42218fa1658f9d14b386031", "fetched_at": "2026-08-28T04:10:49.640514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ludwig-ai/ludwig"}, {"content_hash": "e80e988ff4d4fe9831c487091c972d6da8de12d800c3976e05a6f80c6e6a3b83", "fetched_at": "2026-08-29T08:13:33.017713+00:00", "kind": "homepage", "missing": false, "url": "http://ludwig.ai"}, {"content_hash": "814ef46a6beb51849f1b720a5d29ac8a904b2104fc418890da0efb06fdc7ab18", "fetched_at": "2026-08-29T08:13:33.027178+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ludwig/json"}, {"content_hash": "ae35d413133df0496bf4d5929ffdf8ed452b585a1eb5ec6601704c664539d1f1", "fetched_at": "2026-08-29T08:13:33.021798+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest"}, {"content_hash": "1f3acc836d1b450cf56a0f08842bff171565667731b95109de3ceffbd4329b11", "fetched_at": "2026-08-29T08:13:33.024904+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest/getting_started"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:10:49.640514+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:15:21.407552+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "046a073f7e12f9d25fd0ae7c1d76fa30654d4201d42218fa1658f9d14b386031", "fetched_at": "2026-08-28T04:10:49.640514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ludwig-ai/ludwig"}, {"content_hash": "e80e988ff4d4fe9831c487091c972d6da8de12d800c3976e05a6f80c6e6a3b83", "fetched_at": "2026-08-29T08:13:33.017713+00:00", "kind": "homepage", "missing": false, "url": "http://ludwig.ai"}, {"content_hash": "814ef46a6beb51849f1b720a5d29ac8a904b2104fc418890da0efb06fdc7ab18", "fetched_at": "2026-08-29T08:13:33.027178+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ludwig/json"}, {"content_hash": "ae35d413133df0496bf4d5929ffdf8ed452b585a1eb5ec6601704c664539d1f1", "fetched_at": "2026-08-29T08:13:33.021798+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest"}, {"content_hash": "1f3acc836d1b450cf56a0f08842bff171565667731b95109de3ceffbd4329b11", "fetched_at": "2026-08-29T08:13:33.024904+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest/getting_started"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:15:21.407552+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "046a073f7e12f9d25fd0ae7c1d76fa30654d4201d42218fa1658f9d14b386031", "fetched_at": "2026-08-28T04:10:49.640514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ludwig-ai/ludwig"}, {"content_hash": "e80e988ff4d4fe9831c487091c972d6da8de12d800c3976e05a6f80c6e6a3b83", "fetched_at": "2026-08-29T08:13:33.017713+00:00", "kind": "homepage", "missing": false, "url": "http://ludwig.ai"}, {"content_hash": "814ef46a6beb51849f1b720a5d29ac8a904b2104fc418890da0efb06fdc7ab18", "fetched_at": "2026-08-29T08:13:33.027178+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ludwig/json"}, {"content_hash": "ae35d413133df0496bf4d5929ffdf8ed452b585a1eb5ec6601704c664539d1f1", "fetched_at": "2026-08-29T08:13:33.021798+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest"}, {"content_hash": "1f3acc836d1b450cf56a0f08842bff171565667731b95109de3ceffbd4329b11", "fetched_at": "2026-08-29T08:13:33.024904+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest/getting_started"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:10:49.640514+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:10:49.640514+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:10:49.640514+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:15:21.407552+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "046a073f7e12f9d25fd0ae7c1d76fa30654d4201d42218fa1658f9d14b386031", "fetched_at": "2026-08-28T04:10:49.640514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ludwig-ai/ludwig"}, {"content_hash": "e80e988ff4d4fe9831c487091c972d6da8de12d800c3976e05a6f80c6e6a3b83", "fetched_at": "2026-08-29T08:13:33.017713+00:00", "kind": "homepage", "missing": false, "url": "http://ludwig.ai"}, {"content_hash": "814ef46a6beb51849f1b720a5d29ac8a904b2104fc418890da0efb06fdc7ab18", "fetched_at": "2026-08-29T08:13:33.027178+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ludwig/json"}, {"content_hash": "ae35d413133df0496bf4d5929ffdf8ed452b585a1eb5ec6601704c664539d1f1", "fetched_at": "2026-08-29T08:13:33.021798+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest"}, {"content_hash": "1f3acc836d1b450cf56a0f08842bff171565667731b95109de3ceffbd4329b11", "fetched_at": "2026-08-29T08:13:33.024904+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest/getting_started"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:10:49.640514+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:10:49.640514+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:15:21.407552+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "046a073f7e12f9d25fd0ae7c1d76fa30654d4201d42218fa1658f9d14b386031", "fetched_at": "2026-08-28T04:10:49.640514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ludwig-ai/ludwig"}, {"content_hash": "e80e988ff4d4fe9831c487091c972d6da8de12d800c3976e05a6f80c6e6a3b83", "fetched_at": "2026-08-29T08:13:33.017713+00:00", "kind": "homepage", "missing": false, "url": "http://ludwig.ai"}, {"content_hash": "814ef46a6beb51849f1b720a5d29ac8a904b2104fc418890da0efb06fdc7ab18", "fetched_at": "2026-08-29T08:13:33.027178+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ludwig/json"}, {"content_hash": "ae35d413133df0496bf4d5929ffdf8ed452b585a1eb5ec6601704c664539d1f1", "fetched_at": "2026-08-29T08:13:33.021798+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest"}, {"content_hash": "1f3acc836d1b450cf56a0f08842bff171565667731b95109de3ceffbd4329b11", "fetched_at": "2026-08-29T08:13:33.024904+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest/getting_started"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:10:49.640514+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:10:49.640514+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:10:49.640514+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:15:21.407552+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "046a073f7e12f9d25fd0ae7c1d76fa30654d4201d42218fa1658f9d14b386031", "fetched_at": "2026-08-28T04:10:49.640514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ludwig-ai/ludwig"}, {"content_hash": "e80e988ff4d4fe9831c487091c972d6da8de12d800c3976e05a6f80c6e6a3b83", "fetched_at": "2026-08-29T08:13:33.017713+00:00", "kind": "homepage", "missing": false, "url": "http://ludwig.ai"}, {"content_hash": "814ef46a6beb51849f1b720a5d29ac8a904b2104fc418890da0efb06fdc7ab18", "fetched_at": "2026-08-29T08:13:33.027178+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ludwig/json"}, {"content_hash": "ae35d413133df0496bf4d5929ffdf8ed452b585a1eb5ec6601704c664539d1f1", "fetched_at": "2026-08-29T08:13:33.021798+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest"}, {"content_hash": "1f3acc836d1b450cf56a0f08842bff171565667731b95109de3ceffbd4329b11", "fetched_at": "2026-08-29T08:13:33.024904+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest/getting_started"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:10:49.640514+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:10:49.640514+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:15:21.407552+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "046a073f7e12f9d25fd0ae7c1d76fa30654d4201d42218fa1658f9d14b386031", "fetched_at": "2026-08-28T04:10:49.640514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ludwig-ai/ludwig"}, {"content_hash": "e80e988ff4d4fe9831c487091c972d6da8de12d800c3976e05a6f80c6e6a3b83", "fetched_at": "2026-08-29T08:13:33.017713+00:00", "kind": "homepage", "missing": false, "url": "http://ludwig.ai"}, {"content_hash": "814ef46a6beb51849f1b720a5d29ac8a904b2104fc418890da0efb06fdc7ab18", "fetched_at": "2026-08-29T08:13:33.027178+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ludwig/json"}, {"content_hash": "ae35d413133df0496bf4d5929ffdf8ed452b585a1eb5ec6601704c664539d1f1", "fetched_at": "2026-08-29T08:13:33.021798+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest"}, {"content_hash": "1f3acc836d1b450cf56a0f08842bff171565667731b95109de3ceffbd4329b11", "fetched_at": "2026-08-29T08:13:33.024904+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest/getting_started"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:15:21.407552+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "046a073f7e12f9d25fd0ae7c1d76fa30654d4201d42218fa1658f9d14b386031", "fetched_at": "2026-08-28T04:10:49.640514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ludwig-ai/ludwig"}, {"content_hash": "e80e988ff4d4fe9831c487091c972d6da8de12d800c3976e05a6f80c6e6a3b83", "fetched_at": "2026-08-29T08:13:33.017713+00:00", "kind": "homepage", "missing": false, "url": "http://ludwig.ai"}, {"content_hash": "814ef46a6beb51849f1b720a5d29ac8a904b2104fc418890da0efb06fdc7ab18", "fetched_at": "2026-08-29T08:13:33.027178+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ludwig/json"}, {"content_hash": "ae35d413133df0496bf4d5929ffdf8ed452b585a1eb5ec6601704c664539d1f1", "fetched_at": "2026-08-29T08:13:33.021798+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest"}, {"content_hash": "1f3acc836d1b450cf56a0f08842bff171565667731b95109de3ceffbd4329b11", "fetched_at": "2026-08-29T08:13:33.024904+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest/getting_started"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:15:21.407552+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "046a073f7e12f9d25fd0ae7c1d76fa30654d4201d42218fa1658f9d14b386031", "fetched_at": "2026-08-28T04:10:49.640514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ludwig-ai/ludwig"}, {"content_hash": "e80e988ff4d4fe9831c487091c972d6da8de12d800c3976e05a6f80c6e6a3b83", "fetched_at": "2026-08-29T08:13:33.017713+00:00", "kind": "homepage", "missing": false, "url": "http://ludwig.ai"}, {"content_hash": "814ef46a6beb51849f1b720a5d29ac8a904b2104fc418890da0efb06fdc7ab18", "fetched_at": "2026-08-29T08:13:33.027178+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ludwig/json"}, {"content_hash": "ae35d413133df0496bf4d5929ffdf8ed452b585a1eb5ec6601704c664539d1f1", "fetched_at": "2026-08-29T08:13:33.021798+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest"}, {"content_hash": "1f3acc836d1b450cf56a0f08842bff171565667731b95109de3ceffbd4329b11", "fetched_at": "2026-08-29T08:13:33.024904+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest/getting_started"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:15:21.407552+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "046a073f7e12f9d25fd0ae7c1d76fa30654d4201d42218fa1658f9d14b386031", "fetched_at": "2026-08-28T04:10:49.640514+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ludwig-ai/ludwig"}, {"content_hash": "e80e988ff4d4fe9831c487091c972d6da8de12d800c3976e05a6f80c6e6a3b83", "fetched_at": "2026-08-29T08:13:33.017713+00:00", "kind": "homepage", "missing": false, "url": "http://ludwig.ai"}, {"content_hash": "814ef46a6beb51849f1b720a5d29ac8a904b2104fc418890da0efb06fdc7ab18", "fetched_at": "2026-08-29T08:13:33.027178+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/ludwig/json"}, {"content_hash": "ae35d413133df0496bf4d5929ffdf8ed452b585a1eb5ec6601704c664539d1f1", "fetched_at": "2026-08-29T08:13:33.021798+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest"}, {"content_hash": "1f3acc836d1b450cf56a0f08842bff171565667731b95109de3ceffbd4329b11", "fetched_at": "2026-08-29T08:13:33.024904+00:00", "kind": "site_page", "missing": false, "url": "https://ludwig.ai/latest/getting_started"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 98}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2806, "days_push": 9, "days_rel": 17, "gap_med": 3.0, "n_releases_24m": 23}, "score": 99, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}