Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
047e1c9
docs: sync API specs from openprotein-api (#190)
markgeejw Jun 23, 2026
ec1e9ca
add solublempnn docs
otterein Jun 28, 2026
f6ff87a
Merge pull request #191 from OpenProteinAI/feat/add-solublempnn-docs
otterein Jun 30, 2026
7809f6e
update docs (#192)
otterein Jul 1, 2026
58b8ec2
docs: add new gp kernels to predictor rest api spec (#189)
CBepler Jul 2, 2026
be8c8df
feat: add models page
markgeejw Jul 9, 2026
d40ec8f
hide other tags
markgeejw Jul 9, 2026
54be59d
update text terminology
markgeejw Jul 13, 2026
0c44e8b
docs(models): use batch/structures for structure prediction
markgeejw Jul 14, 2026
5f03c5a
docs: bump openprotein-python for GP kernel
markgeejw Jul 20, 2026
6cfc305
chore: enable -W strict sphinx build gate (#176)
markgeejw Jul 20, 2026
faf4763
updated screenshots
d2phap Jul 29, 2026
9175bd8
updated screenshots for opmodels
d2phap Aug 3, 2026
c5b7e87
updated screenshots of single predict, design
d2phap Aug 3, 2026
48bd66a
Merge pull request #195 from OpenProteinAI/phap/release-updates
d2phap Aug 6, 2026
32e7d0b
Update prompts.rst
liyine47 Aug 12, 2026
b3a6f67
added system level prompt screenshot
liyine47 Aug 12, 2026
8ab24bd
Update score-sequences.rst
liyine47 Aug 12, 2026
4237c5d
Add screenshots for running predict within a table
liyine47 Aug 12, 2026
cb96ff2
Adding page about antibody annotations
liyine47 Aug 12, 2026
b517fad
add cluster page
liyine47 Aug 12, 2026
5e887d4
add images for cluster page
liyine47 Aug 12, 2026
0233d01
add images for antibody annotations
liyine47 Aug 12, 2026
bda594a
Update antibody-hit-selection-ngs.rst
liyine47 Aug 12, 2026
3fc6d0a
add screenshots for antibody hit selection walkthrough
liyine47 Aug 12, 2026
0257ac4
ngs-predict image
liyine47 Aug 12, 2026
3ab43d3
Update antibody-annotation.rst
liyine47 Aug 12, 2026
1cc3877
Update cluster-sequences.rst
liyine47 Aug 12, 2026
df88185
Update source/web-app/opmodels/antibody-annotation.rst
d2phap Aug 12, 2026
a19dfa3
Update source/web-app/opmodels/antibody-annotation.rst
d2phap Aug 12, 2026
74f08a9
add TOC tree
d2phap Aug 12, 2026
8105c3b
Update prompts.rst
liyine47 Aug 19, 2026
bddd85a
Update score-sequences.rst
liyine47 Aug 19, 2026
21a3940
Update cluster-sequences.rst
liyine47 Aug 19, 2026
86b21a1
Update antibody-annotation.rst
liyine47 Aug 19, 2026
f7ba071
Update antibody-annotation.rst
liyine47 Aug 19, 2026
150dec3
Add files via upload
liyine47 Aug 19, 2026
1174aa9
updated screenshot with new ui
liyine47 Aug 19, 2026
6f5000d
Add files via upload
liyine47 Aug 19, 2026
b59375b
Add files via upload
liyine47 Aug 19, 2026
641c794
Update index.rst
liyine47 Aug 20, 2026
615e4fd
Merge pull request #196 from OpenProteinAI/predict-cluster-annotation…
GiorgiaBorgmann Aug 20, 2026
34faf19
chore: update flake [skip ci]
markgeejw Aug 20, 2026
9d5b6d2
docs: add protenix-v2 model and confidence to fold api reference (#199)
markgeejw Aug 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 7 additions & 10 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion flake.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
description = "A basic flake with a shell";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
inputs.nixpkgs.url = "nixpkgs";
inputs.systems.url = "github:nix-systems/default";
inputs.flake-utils = {
url = "github:numtide/flake-utils";
Expand Down
59 changes: 40 additions & 19 deletions pixi.lock

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ dependencies = [
"sphinx-notfound-page>=1.1.0,<1.2.0",
"sphinx-design>=0.6.1,<0.7",
# autodoc
"openprotein-python>=0.14.2,<0.15.0",
"openprotein-python>=0.16.0,<0.17.0",
"ipython>=9.8.0,<10",
# nbsphinx needs ipywidgets to render notebooks containing widget output
"ipywidgets>=8.1.0,<9",
Expand All @@ -39,7 +39,9 @@ channels = ["conda-forge"]
platforms = ["linux-64", "osx-arm64"]

[tool.pixi.tasks]
build = "sphinx-build source build"
# -W promotes warnings to errors so doc/client-API drift fails the build;
# --keep-going still reports every warning in one pass.
build = "sphinx-build -W --keep-going source build"

[tool.pixi.feature.dev.tasks]
# install dev version of the client
Expand Down
440 changes: 439 additions & 1 deletion source/_static/js/embeddingsSpec.js

Large diffs are not rendered by default.

12 changes: 6 additions & 6 deletions source/_static/js/foldSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ const foldSpec = {
tags: ["fold requests", "esmfold2"],
summary: "ESMFold2",
description:
"Create structure prediction using ESMFold2, an all-atom structure prediction\nmodel. Folds protein/DNA/RNA/ligand complexes, optionally conditioned on an MSA.\n\nArgs:\n - `sequences`: List of chain/molecule entities in the input. Each entry describes a protein, nucleic acid, or ligand, including its sequence, identifier(s), and optional attributes such as msa_id, SMILES string, CCD code.\n - `msa_id` should refer to the id of an msa job which included this protein as a query, or `null` for single sequence mode.\n - `smiles` and `ccd` are mutually exclusive for ligands.\n - `diffusion_samples`: Number of diffusion samples to use. Controls how many independent structure samples are generated per input. Default is 1.\n - `num_steps`: Number of sampling steps to use. Sets the number of steps in the diffusion process for each sample. Default is 200.\n - `num_recycles`: Number of recycling steps to use. Determines how many times the model refines its prediction iteratively. Default is 3.\n - `seed`: Random seed for reproducible sampling. `null` lets the system decide.",
"Create structure prediction using ESMFold2, an all-atom structure prediction\nmodel. Folds protein/DNA/RNA/ligand complexes, optionally conditioned on an MSA.\n\nArgs:\n - `sequences`: List of chain/molecule entities in the input. Each entry describes a protein, nucleic acid, or ligand, including its sequence, identifier(s), and optional attributes such as msa_id, SMILES string, CCD code.\n - `msa_id` should refer to the id of an msa job which included this protein as a query, or `null` for single sequence mode.\n - `smiles` and `ccd` are mutually exclusive for ligands.\n - `diffusion_samples`: Number of diffusion samples to use. Controls how many independent structure samples are generated per input. Default is 1.\n - `num_steps`: Number of sampling steps to use. Sets the number of steps in the diffusion process for each sample. Default is 100.\n - `num_recycles`: Number of recycling steps to use. Determines how many times the model refines its prediction iteratively. Default is 3.\n - `seed`: Random seed for reproducible sampling. `null` lets the system decide.",
requestBody: {
description: "Request for structure prediction.",
content: {
Expand Down Expand Up @@ -328,7 +328,7 @@ const foldSpec = {
tags: ["fold requests", "esmfold2"],
summary: "ESMFold2-Fast",
description:
"Create structure prediction using ESMFold2-Fast, an inference-optimized\nsingle-sequence variant of ESMFold2 whose folding trunk has half the depth\n(24 vs 48 layers). Folds protein/DNA/RNA/ligand complexes.\n\nUnlike ESMFold2, ESMFold2-Fast is single-sequence only and does not accept\nan MSA (`msa_id`).\n\nArgs:\n - `sequences`: List of chain/molecule entities in the input. Each entry describes a protein, nucleic acid, or ligand, including its sequence, identifier(s), and optional attributes such as SMILES string, CCD code.\n - `smiles` and `ccd` are mutually exclusive for ligands.\n - `diffusion_samples`: Number of diffusion samples to use. Controls how many independent structure samples are generated per input. Default is 1.\n - `num_steps`: Number of sampling steps to use. Sets the number of steps in the diffusion process for each sample. Default is 200.\n - `num_recycles`: Number of recycling steps to use. Determines how many times the model refines its prediction iteratively. Default is 3.\n - `seed`: Random seed for reproducible sampling. `null` lets the system decide.",
"Create structure prediction using ESMFold2-Fast, an inference-optimized\nsingle-sequence variant of ESMFold2 whose folding trunk has half the depth\n(24 vs 48 layers). Folds protein/DNA/RNA/ligand complexes.\n\nUnlike ESMFold2, ESMFold2-Fast is single-sequence only and does not accept\nan MSA (`msa_id`).\n\nArgs:\n - `sequences`: List of chain/molecule entities in the input. Each entry describes a protein, nucleic acid, or ligand, including its sequence, identifier(s), and optional attributes such as SMILES string, CCD code.\n - `smiles` and `ccd` are mutually exclusive for ligands.\n - `diffusion_samples`: Number of diffusion samples to use. Controls how many independent structure samples are generated per input. Default is 1.\n - `num_steps`: Number of sampling steps to use. Sets the number of steps in the diffusion process for each sample. Default is 100.\n - `num_recycles`: Number of recycling steps to use. Determines how many times the model refines its prediction iteratively. Default is 3.\n - `seed`: Random seed for reproducible sampling. `null` lets the system decide.",
requestBody: {
description: "Request for structure prediction.",
content: {
Expand Down Expand Up @@ -2006,7 +2006,7 @@ const foldSpec = {
type: "integer",
description: "Number of sampling steps to use.",
minimum: 1,
default: 200,
default: 100,
},
num_recycles: {
type: "integer",
Expand Down Expand Up @@ -2047,7 +2047,7 @@ const foldSpec = {
],
],
diffusion_samples: 1,
num_steps: 200,
num_steps: 100,
num_recycles: 3,
},
},
Expand Down Expand Up @@ -2091,7 +2091,7 @@ const foldSpec = {
type: "integer",
description: "Number of sampling steps to use.",
minimum: 1,
default: 200,
default: 100,
},
num_recycles: {
type: "integer",
Expand Down Expand Up @@ -2131,7 +2131,7 @@ const foldSpec = {
],
],
diffusion_samples: 1,
num_steps: 200,
num_steps: 100,
num_recycles: 3,
},
},
Expand Down
62 changes: 42 additions & 20 deletions source/_static/js/getSwaggerJson.js
Original file line number Diff line number Diff line change
Expand Up @@ -199,75 +199,97 @@ const prodFetchUrls = {
export default async function getSwaggerJson(swaggerType) {
let apiPathToShow = [];
let apiSchemasToShow = [];
let swagerSpecs = {};
let swaggerSpecs = {};

const environment = getEnvironment();
const fetchUrls = environment === "dev" ? devFetchUrls : prodFetchUrls;

if (swaggerType === "project") {
// get the full swagger specs
swagerSpecs = await (await fetch(fetchUrls.projectUrl)).json();
swaggerSpecs = await (await fetch(fetchUrls.projectUrl)).json();
// update variables according to the swagger type
apiPathToShow = apiPathProject;
apiSchemasToShow = apiSchemasProject;
swagerSpecs.tags = apiTagsProject;
swaggerSpecs.tags = apiTagsProject;
}
if (swaggerType === "align") {
// get the full swagger specs
swagerSpecs = await (await fetch(fetchUrls.projectUrl)).json();
swaggerSpecs = await (await fetch(fetchUrls.projectUrl)).json();

// update variables according to the swagger type
apiPathToShow = apiPathAlign;
apiSchemasToShow = apiSchemasAlign;
swagerSpecs.tags = apiTagsAlign;
swaggerSpecs.tags = apiTagsAlign;
} else if (swaggerType === "poet") {
// get the full swagger specs
swagerSpecs = await (await fetch(fetchUrls.poetUrl)).json();
swaggerSpecs = await (await fetch(fetchUrls.poetUrl)).json();
// update variables according to the swagger type
apiPathToShow = apiPathPoet;
apiSchemasToShow = apiSchemasPoet;
swagerSpecs.tags = apiTagsPoet;
swaggerSpecs.tags = apiTagsPoet;
} else if (swaggerType === "auth") {
// get the full swagger specs
swagerSpecs = await (await fetch(fetchUrls.authUrl)).json();
swaggerSpecs = await (await fetch(fetchUrls.authUrl)).json();
// update variables according to the swagger type
apiPathToShow = apiPathAuth;
apiSchemasToShow = apiSchemasAuth;
swagerSpecs.tags = apiTagsAuth;
swaggerSpecs.tags = apiTagsAuth;
} else if (swaggerType === "embeddings") {
// get the full swagger specs
swagerSpecs = await (await fetch(fetchUrls.embeddingsUrl)).json();
return swagerSpecs;
swaggerSpecs = await (await fetch(fetchUrls.embeddingsUrl)).json();
return swaggerSpecs;
} else if (swaggerType === "prompt") {
// The prompt service exports its own (prompt-only) spec, so there is
// nothing to filter — fetch and return it as-is. Includes the dynamic
// per-system-prompt routes whenever the backend DB is seeded.
swagerSpecs = await (await fetch(fetchUrls.promptUrl)).json();
return swagerSpecs;
swaggerSpecs = await (await fetch(fetchUrls.promptUrl)).json();
return swaggerSpecs;
} else if (swaggerType === "models") {
// Served from the main service. Rather than curating explicit path/schema
// allowlists, just keep the models module's routes (everything under
// /api/v1/models).
swaggerSpecs = await (await fetch(fetchUrls.projectUrl)).json();
const modelsPaths = {};
const usedTags = new Set();
for (const pathKey in swaggerSpecs.paths) {
if (!pathKey.startsWith("/api/v1/models")) continue;
const pathItem = swaggerSpecs.paths[pathKey];
modelsPaths[pathKey] = pathItem;
for (const method in pathItem) {
(pathItem[method].tags || []).forEach((t) => usedTags.add(t));
}
}
swaggerSpecs.paths = modelsPaths;
// Keep only the tags used by the models routes so the other main-service
// tag sections don't render.
if (Array.isArray(swaggerSpecs.tags)) {
swaggerSpecs.tags = swaggerSpecs.tags.filter((t) => usedTags.has(t.name));
}
return swaggerSpecs;
}

const filteredPathsToShow = {};
for (const pathKey in swagerSpecs.paths) {
for (const pathKey in swaggerSpecs.paths) {
apiPathToShow.forEach((pathToShow) => {
if (pathToShow === pathKey) {
filteredPathsToShow[pathToShow] = swagerSpecs.paths[pathToShow];
filteredPathsToShow[pathToShow] = swaggerSpecs.paths[pathToShow];
}
});
}

swagerSpecs.paths = filteredPathsToShow;
swaggerSpecs.paths = filteredPathsToShow;

const filteredSchemasToShow = {};
for (const schemaKey in swagerSpecs.components.schemas) {
for (const schemaKey in swaggerSpecs.components.schemas) {
apiSchemasToShow.forEach((schemaKeyToShow) => {
if (schemaKeyToShow === schemaKey) {
filteredSchemasToShow[schemaKeyToShow] =
swagerSpecs.components.schemas[schemaKeyToShow];
swaggerSpecs.components.schemas[schemaKeyToShow];
}
});
}

swagerSpecs.components.schemas = filteredSchemasToShow;
swaggerSpecs.components.schemas = filteredSchemasToShow;

return swagerSpecs;
return swaggerSpecs;
}
24 changes: 23 additions & 1 deletion source/_static/js/predictorSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -1450,7 +1450,15 @@ const predictorSpec = {
type: {
type: "string",
description: "Type of kernel to use with GP.",
enum: ["linear", "rbf", "matern21", "matern32"],
enum: [
"linear",
"rbf",
"matern12",
"matern32",
"matern52",
"periodic",
"rational_quadratic",
],
example: "rbf",
},
multitask: {
Expand All @@ -1459,6 +1467,20 @@ const predictorSpec = {
example: true,
default: false,
},
period: {
type: "number",
format: "double",
description:
"Period length for the periodic kernel. Only valid when type is periodic.",
example: 1,
},
alpha: {
type: "number",
format: "double",
description:
"Scale-mixture parameter for the rational_quadratic kernel; must be > 0. Only valid when type is rational_quadratic.",
example: 1,
},
},
},
TrainRequestGP: {
Expand Down
Loading
Loading