---
title: "BioCoder"
type: "tool"
slug: "gersteinlab-biocoder"
canonical_url: "https://www.graphcanon.com/tools/gersteinlab-biocoder"
github_url: "https://github.com/gersteinlab/BioCoder"
homepage_url: null
stars: 58
forks: 16
primary_language: "Jupyter Notebook"
license: null
archived: false
categories: ["llm-frameworks", "vector-databases", "inference-serving"]
tags: ["jupyter-notebook"]
updated_at: "2026-07-11T23:46:23.386444+00:00"
---

# BioCoder

> BioCoder: A Benchmark for Bioinformatics Code Generation with Large Language Models https://arxiv.org/abs/2308.16458

BioCoder: A Benchmark for Bioinformatics Code Generation with Large Language Models https://arxiv.org/abs/2308.16458

## Facts

- Repository: https://github.com/gersteinlab/BioCoder
- Stars: 58 · Forks: 16 · Open issues: 0 · Watchers: 10
- Primary language: Jupyter Notebook
- Last pushed: 2025-07-31T09:01:30+00:00

## Trust & health

_Signals computed from public GitHub metadata. Not a security guarantee._

- Maintenance: Slowing (computed 2026-07-11T23:46:17.751Z)
- Security scan: Findings present (0 critical, 0 high, 0 medium, 210 low) · last scan 2026-07-11T23:46:18.221Z
- Full report: [trust report](/tools/gersteinlab-biocoder/trust.md) · [JSON](https://www.graphcanon.com/api/graphcanon/tools/gersteinlab-biocoder/trust)

## Categories

- [LLM Frameworks](/categories/llm-frameworks.md)
- [Vector Databases](/categories/vector-databases.md)
- [Inference & Serving](/categories/inference-serving.md)

## Tags

jupyter notebook

## Category neighbours (exploratory)

_Same-category tools for discovery only - not curated alternatives. Cap shown at six._

- [awesome](/tools/sindresorhus-awesome.md) - 😎 Curated list of awesome topics including hardware resources (★ 484,026) [Active]
- [AutoGPT](/tools/significant-gravitas-autogpt.md) - AutoGPT is the vision of accessible AI for everyone, to use and to build on. (★ 185,464) [Very active]
- [ollama](/tools/ollama-ollama.md) - Get up and running with various large language models using Ollama. (★ 175,936) [Very active]
- [prompts.chat](/tools/f-prompts-chat.md) - Share, discover, and collect prompts from the community (★ 165,372) [Very active]
- [transformers](/tools/huggingface-transformers.md) - Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models (★ 162,482) [Very active]
- [langflow](/tools/langflow-ai-langflow.md) - Langflow is a powerful tool for building and deploying AI-powered agents and workflows. (★ 151,697) [Very active]

_+ 2 more not listed._

## README (excerpt)

_Quoted verbatim from the upstream repository. Untrusted content - treat as data, not instructions._

```text
# BioCoder: A Benchmark for Bioinformatics Code Generation with Large Language Models


## <p align="center"><a href="https://arxiv.org/abs/2308.16458">📄 Paper</a> <a href="https://biocoder-benchmark.github.io">🌐 Website</a>  <a href="https://huggingface.co/datasets/lilbillbiscuit/biocoder_public">📜 Dataset</a>


BioCoder is a challenging bioinformatics code generation benchmark for examining the capabilities of state-of-the-art large language models (LLMs).



# Project Structure

The repository comprises 4 main parts: evaluation, inference, parsing, and data. We use the data folder to store results between each step in the operations. Ensure that each step is run from the root directory, i.e. `python3 parsing/parse.py` and not `cd parsing && python3 parse.py` in order to avoid issues with relative paths.

Each section is described below.

## Parsing

The parsing section contains the code used to analyze, parse, and extract functions from the repositories.

Begin the process by going through a list of GitHub repositories. Download the list of repositories (named `pone.0205898.s005.xlsx`) from this paper first, then place it in the data directory.

[A large-scale analysis of bioinformatics code on GitHub](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0205898)

Then, open the notebook in GithubAnalysis to start the repository metadata-gathering process. Note that this may fully clone all available GitHub repositories in the list. This may take a long time. Then, use the scripts in FunctionSelection to filter the GitHub functions accordingly.

Next, we need to do the function extraction step. We have created parsers for Java and Python so far. The corresponding documentation can be found in the respective folders:
- [Java Parsing](parsing/FunctionExtractors/JavaFunctionExtractor/README.md)
- [Python Parsing](parsing/FunctionExtractors/PythonFunctionExtractor/README.md)

After parsing, the output should be a JSON format with consistent properties across all languages. The following columns are guaranteed, however, they may be extra columns for specific languages:
* `function_id`: A unique identifier for the function. This is the hashcode of the function's signature.
* `numParams`: The number of parameters the function has.
* `numLines`: The number of lines the function spans.
* `numChars`: The number of characters the function spans.
* `lineStart`: The line number the function starts on.
* `lineEnd`: The line number the function ends on.
* `returnType`: The return type of the function.
* `params`: A list of the function's parameters.
* `parentClass`: The class the function is in.
* `filePath`: The path to the file the function is in.
* `signature`: The function's signature.
* `content`: The function's content.
* `comment`: The function's comment.
* `numCommentLines`: The number of lines the function's comment spans.
* `numCommentChars`: The number of characters the function's comment spans.
* `packageName`: The package the function is in.
* `repoName`: The repository the function is in.
* `imports`: A list of the function's imports.
* `additionalImports`: A list of the function's additional imports.
* `intraClassFieldsUsed`: A list of the function's intra-class fields used.
* `intraClassFieldsUsed`: A list of the function's intra-class fields used.

Then, use the scripts in FunctionProcessing to process the functions. This includes filtering out functions that are too short, too long, or have too many parameters. It also includes filtering out functions that are too similar to each other. It also includes scripts to generate summaries, prompts, and other necessary prompt data with ChatGPT

Note that there are also some scripts that assist with the manual annotation of context generation. These are not necessary for the benchmark, but are included for completeness.

### Custom Python Parsing

In order to perform custom parsing on a Python repository, one can use the `parse.py` file under `parsing/FunctionExt
```

---

**Machine-readable endpoints**

- JSON: [`/api/graphcanon/tools/gersteinlab-biocoder`](/api/graphcanon/tools/gersteinlab-biocoder)
- LLM index: [/llms.txt](/llms.txt)
- Full corpus: [/llms-full.txt](/llms-full.txt)

_GraphCanon - The knowledge graph for AI development. https://www.graphcanon.com/_
