{"course":{"slug":"hugging-face","title":"Hugging Face, End to End","url":"https://addaly.com/learn/hugging-face","level":"intermediate","track":"create"},"lesson":{"slug":"contributing-back","title":"Pull requests, discussions and being useful","url":"https://addaly.com/learn/hugging-face/contributing-back","position":74,"of":75,"minutes":8,"answer":"Any Hub repository accepts pull requests and proposals can be loaded with revision=\"refs/pr/N\" before merging, so the highest-value contributions are small (a missing licence or chat template, a safetensors conversion, a card translation.","keyIdea":"Any Hub repository accepts pull requests and proposals can be loaded with `revision=\"refs/pr/N\"` before merging, so the highest-value contributions are small (a missing licence or chat template, a safetensors conversion, a card translation, a named limitation) and the discussions tab usually holds the documentation the card does not."},"body":{"format":"markdown","text":"## You can open a pull request on a model\n\nBecause a repository is git, anyone can propose a change to anyone's model. On the Hub these live as refs like `refs/pr/4`, so a proposal can be downloaded and tested before it is merged:\n\n```python\nmodel = AutoModel.from_pretrained(\"some-org/some-model\", revision=\"refs/pr/4\")\n```\n\nThe contributions that are welcome and take under an hour:\n\n- **A missing licence or `pipeline_tag`.** Without the tag the model is invisible to every filtered search, which the author usually does not realise.\n- **A safetensors conversion**, so nobody has to unpickle a stranger's file.\n- **A missing `chat_template`**, which is the difference between the model working and not.\n- **A working code snippet** in the card, tested.\n- **A translation of the card**, which for Hindi, Bengali, Tamil or Marathi widens who can use the model.\n- **A named limitation you found**, with the inputs that produced it.\n\nThat last one is the most valuable and the least common. A card that says \"fails on inputs over 400 tokens, see discussion #12\" is worth more than a benchmark table.\n\n```bash\nhf upload some-org/some-model ./README.md --create-pr\n```\n\n## Discussions are where the real documentation lives\n\nThe Community tab on a model or dataset frequently contains the information the card does not: the actual prompt format, the version that broke, the workaround for a tokenizer bug, the licence clarification from the author. **Read the discussions before concluding a model does not work.** A large fraction of the problems in this course have a thread about them.\n\nWhen you open one, make it answerable. A good report contains the model id with revision, library versions, the exact rendered prompt, the generation parameters, what you expected and what happened. Most unanswered threads on the Hub are missing the rendered prompt, and the rendered prompt is the answer surprisingly often.\n\n## The norms\n\nThe Hub is a public square with an unusually mixed population: researchers, hobbyists, students, companies. A few things hold:\n\n- **Assume the maintainer is unpaid.** Most are. A model released for free carries no support obligation.\n- **Report security issues privately first.** A malicious file or a leaked secret goes to the platform and the author, not to a public thread.\n- **Do not reupload somebody's model under your own name.** Fine-tune it, quantize it, convert it, and say what it came from, with a `base_model` field and a link. Republishing weights as your own is both a licence problem and the thing that damages the commons everybody here depends on.\n- **Credit the dataset** as carefully as you credit the model.\n\n## Publishing is contributing\n\nThe most useful things a learner can publish are not state-of-the-art models:\n\n- **A quantized conversion** of a model that has none, done carefully and documented.\n- **A Space** that demonstrates a technique with a readable `app.py`. People learn from working code far more than from documentation.\n- **A dataset** in a language or domain that is thin on the Hub. Indic-language datasets are scarce and valuable, and a few thousand well-documented rows is a real contribution.\n- **An evaluation** of existing models on a task nobody has measured, with the set published.\n- **A card translation.**\n\nEach of these is achievable in a weekend and each is more useful than another fine-tune of a popular model on a public instruction set.\n\n## The reciprocity that makes this work\n\nEverything in this course exists because people published things they could have kept. The libraries are free, the models are free, the hosting is free, the compute for small things is free. That arrangement is not guaranteed and it is not charity: it is sustained by people putting back more than they take out.\n\nYou do not owe anyone a model. Opening one pull request that adds a missing licence tag takes ten minutes and makes a repository usable by everyone who finds it afterwards. That is a reasonable rate of exchange.\n\n## Do this now\n\nFind one model you have used whose card is missing something you know: a licence, a template, a limitation, a working snippet. Open a pull request. It is the fastest way to stop being only a consumer of this ecosystem."},"check":{"question":"Why does a model missing its `pipeline_tag` become effectively invisible on the Hub, even with many downloads?","options":[{"text":"Untagged repositories are excluded from the download counter, so their apparent popularity understates real use.","correct":false,"tempting":"Downloads are counted regardless of metadata."},{"text":"The Hub's full-text search indexes only repositories with complete metadata, so the card's prose is never matched.","correct":false,"tempting":"Full-text search covers card content independently of the task tag."},{"text":"Without a task tag it cannot appear in the controlled-vocabulary filters most people use to browse.","correct":true},{"text":"Models without a task tag are ranked below tagged ones in every sort order as a quality signal.","correct":false,"tempting":"Invents a ranking penalty rather than describing exclusion from a filter."}]},"prev":{"slug":"the-card-that-passes-review","title":"Writing a card somebody can audit","url":"https://addaly.com/learn/hugging-face/the-card-that-passes-review"},"next":{"slug":"pinning-and-keeping-up","title":"Still working next year","url":"https://addaly.com/learn/hugging-face/pinning-and-keeping-up"},"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'Pull requests, discussions and being useful', in Hugging Face, End to End. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/hugging-face/contributing-back (Accessed: 13 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"Pull requests, discussions and being useful","courseTitle":"Hugging Face, End to End","module":{"index":8,"slug":"depending-on-it-and-publishing","title":"Depending on it, and publishing so others can"},"answer":null,"keyIdea":"Any Hub repository accepts pull requests and proposals can be loaded with `revision=\"refs/pr/N\"` before merging, so the highest-value contributions are small (a missing licence or chat template, a safetensors conversion, a card translation, a named limitation) and the discussions tab usually holds the documentation the card does not.","hero":{"kind":"plate","image":null,"alt":null,"caption":null},"blocks":[{"t":"h2","id":"you-can-open-a-pull-request-on-a-model","runs":[{"text":"You can open a pull request on a model"}]},{"t":"p","runs":[{"text":"Because a repository is git, anyone can propose a change to anyone’s model. On the Hub these live as refs like "},{"text":"refs/pr/4","code":true},{"text":", so a proposal can be downloaded and tested before it is merged:"}]},{"t":"code","lang":"python","label":"Python","text":"model = AutoModel.from_pretrained(\"some-org/some-model\", revision=\"refs/pr/4\")"},{"t":"p","runs":[{"text":"The contributions that are welcome and take under an hour:"}]},{"t":"ul","items":[[{"text":"A missing licence or ","b":true},{"text":"pipeline_tag","b":true,"code":true},{"text":".","b":true},{"text":" Without the tag the model is invisible to every filtered search, which the author usually does not realise."}],[{"text":"A safetensors conversion","b":true},{"text":", so nobody has to unpickle a stranger’s file."}],[{"text":"A missing ","b":true},{"text":"chat_template","b":true,"code":true},{"text":", which is the difference between the model working and not."}],[{"text":"A working code snippet","b":true},{"text":" in the card, tested."}],[{"text":"A translation of the card","b":true},{"text":", which for Hindi, Bengali, Tamil or Marathi widens who can use the model."}],[{"text":"A named limitation you found","b":true},{"text":", with the inputs that produced it."}]]},{"t":"p","runs":[{"text":"That last one is the most valuable and the least common. A card that says “fails on inputs over 400 tokens, see discussion #12” is worth more than a benchmark table."}]},{"t":"code","lang":"bash","label":"Bash","text":"hf upload some-org/some-model ./README.md --create-pr"},{"t":"h2","id":"discussions-are-where-the-real-documentation-lives","runs":[{"text":"Discussions are where the real documentation lives"}]},{"t":"p","runs":[{"text":"The Community tab on a model or dataset frequently contains the information the card does not: the actual prompt format, the version that broke, the workaround for a tokenizer bug, the licence clarification from the author. "},{"text":"Read the discussions before concluding a model does not work.","b":true},{"text":" A large fraction of the problems in this course have a thread about them."}]},{"t":"p","runs":[{"text":"When you open one, make it answerable. A good report contains the model id with revision, library versions, the exact rendered prompt, the generation parameters, what you expected and what happened. Most unanswered threads on the Hub are missing the rendered prompt, and the rendered prompt is the answer surprisingly often."}]},{"t":"h2","id":"the-norms","runs":[{"text":"The norms"}]},{"t":"p","runs":[{"text":"The Hub is a public square with an unusually mixed population: researchers, hobbyists, students, companies. A few things hold:"}]},{"t":"ul","items":[[{"text":"Assume the maintainer is unpaid.","b":true},{"text":" Most are. A model released for free carries no support obligation."}],[{"text":"Report security issues privately first.","b":true},{"text":" A malicious file or a leaked secret goes to the platform and the author, not to a public thread."}],[{"text":"Do not reupload somebody’s model under your own name.","b":true},{"text":" Fine-tune it, quantize it, convert it, and say what it came from, with a "},{"text":"base_model","code":true},{"text":" field and a link. Republishing weights as your own is both a licence problem and the thing that damages the commons everybody here depends on."}],[{"text":"Credit the dataset","b":true},{"text":" as carefully as you credit the model."}]]},{"t":"h2","id":"publishing-is-contributing","runs":[{"text":"Publishing is contributing"}]},{"t":"p","runs":[{"text":"The most useful things a learner can publish are not state-of-the-art models:"}]},{"t":"ul","items":[[{"text":"A quantized conversion","b":true},{"text":" of a model that has none, done carefully and documented."}],[{"text":"A Space","b":true},{"text":" that demonstrates a technique with a readable "},{"text":"app.py","code":true},{"text":". People learn from working code far more than from documentation."}],[{"text":"A dataset","b":true},{"text":" in a language or domain that is thin on the Hub. Indic-language datasets are scarce and valuable, and a few thousand well-documented rows is a real contribution."}],[{"text":"An evaluation","b":true},{"text":" of existing models on a task nobody has measured, with the set published."}],[{"text":"A card translation.","b":true}]]},{"t":"p","runs":[{"text":"Each of these is achievable in a weekend and each is more useful than another fine-tune of a popular model on a public instruction set."}]},{"t":"h2","id":"the-reciprocity-that-makes-this-work","runs":[{"text":"The reciprocity that makes this work"}]},{"t":"p","runs":[{"text":"Everything in this course exists because people published things they could have kept. The libraries are free, the models are free, the hosting is free, the compute for small things is free. That arrangement is not guaranteed and it is not charity: it is sustained by people putting back more than they take out."}]},{"t":"p","runs":[{"text":"You do not owe anyone a model. Opening one pull request that adds a missing licence tag takes ten minutes and makes a repository usable by everyone who finds it afterwards. That is a reasonable rate of exchange."}]},{"t":"h2","id":"do-this-now","runs":[{"text":"Do this now"}],"role":"try"},{"t":"p","runs":[{"text":"Find one model you have used whose card is missing something you know: a licence, a template, a limitation, a working snippet. Open a pull request. It is the fastest way to stop being only a consumer of this ecosystem."}]}],"check":{"question":[{"text":"Why does a model missing its "},{"text":"pipeline_tag","code":true},{"text":" become effectively invisible on the Hub, even with many downloads?"}],"options":[{"text":[{"text":"Untagged repositories are excluded from the download counter, so their apparent popularity understates real use."}],"correct":false,"tempting":[{"text":"Downloads are counted regardless of metadata."}]},{"text":[{"text":"The Hub’s full-text search indexes only repositories with complete metadata, so the card’s prose is never matched."}],"correct":false,"tempting":[{"text":"Full-text search covers card content independently of the task tag."}]},{"text":[{"text":"Without a task tag it cannot appear in the controlled-vocabulary filters most people use to browse."}],"correct":true,"tempting":null},{"text":[{"text":"Models without a task tag are ranked below tagged ones in every sort order as a quality signal."}],"correct":false,"tempting":[{"text":"Invents a ranking penalty rather than describing exclusion from a filter."}]}],"order":[1,3,2,0],"why":null},"prev":{"slug":"the-card-that-passes-review","title":"Writing a card somebody can audit","minutes":9},"next":{"slug":"pinning-and-keeping-up","title":"Still working next year","minutes":9}}}