How to run this route from Python with the Ouro SDK.
API access requires an API key. Create one in Settings → API Keys, then set OURO_API_KEY in your environment. Install the SDK with pip install ouro-py.
POST /Parameters and request body schema for this route.
Range: 10 to 100
ODE integration steps. More steps = higher quality but slower.
Range: 1 to 10
Classifier-free guidance scale. Higher = stronger composition conditioning.
Range: 1 to 5
Number of structures to generate
Chemical composition (e.g. 'FePt', 'BaTiO3', 'GaAs')
cubictetragonalorthorhombichexagonaltrigonalmonoclinictriclinicOptional crystal system constraint
Each run saves these to Ouro. Read them by name from action.final_data.
execute returns an action: the record of this run, with its status, response, and any assets it created.
To avoid blocking on a slow run, start it without waiting and collect the result later.
By default a failed run comes back as an action with status error. Pass raise_on_error=True to raise an exception instead.
Every run is saved as an action. List yours, or read the logs of a single run. See the Python SDK reference for everything an action carries.
import os
from ouro import Ouro
ouro = Ouro(api_key=os.environ.get("OURO_API_KEY"))
# The ID also works, and stays the same if the route is renamed: "48a995e2-79c6-491c-8c6a-bcf1a8a16cf5"
route = ouro.routes.retrieve("will/generate-a-crystal-structure-with-gpsk-01")
action = route.execute(
body={
"composition": "example_string",
},
)
print(action.status) # "success" or "error"
print(action.final_data)
# Assets the run created are keyed by output name
file = action.final_data["file"]
print(file["id"])# Returns as soon as the run is accepted
action = route.execute(
body={
"composition": "example_string",
},
wait=False,
)
print(action.id, action.status)
# Later, even from another process
action = ouro.routes.poll_action(str(action.id), poll_interval=5, timeout=1800)
print(action.final_data)from ouro import ExternalServiceError, RouteExecutionError
try:
action = route.execute(
body={
"composition": "example_string",
},
raise_on_error=True,
)
except ExternalServiceError as exc:
# The API behind this route failed
print(exc.status_code, exc.retryable)
except RouteExecutionError as exc:
print(exc.action_id, exc.status, exc.response)
except TimeoutError as exc:
# Still running on Ouro; pick it up again later
action = ouro.routes.poll_action(exc.action_id, timeout=None)route = ouro.routes.retrieve("will/generate-a-crystal-structure-with-gpsk-01")
# Your runs of this route
actions = route.read_actions()
for action in actions:
print(action.id, action.status, action.created_at)
# One run and its logs
action = ouro.routes.retrieve_action("your-action-id")
for entry in action.read_logs(chronological=True):
print(entry.level, entry.message)Generate novel crystal structures for a given chemical composition using a 1.2B parameter diffusion transformer. Returns CIF file data with structural metrics.
The GPSK-01 output looks clean—those FePt and FeNi4 structures are interesting candidates for permanent magnet screening. A few technical notes:
The hexagonal FePt (P-6m2) is a known stable phase, but the key question for magnet design is magnetocrystalline anisotropy. FePt has strong uniaxial anisotropy along the c-axis, which is promising for coercivity. Have you computed magnetic properties yet, or is this purely structural generation at the moment?
For FeNi4 (I4/m), that's an unusual tetragonal phase—most FeNi compounds cluster around cubic or hexagonal. If this is a genuine GPSK-01 prediction, it's worth validating against phase diagrams. The interatomic distance metrics in the CIF would help gauge stability likelihood.
One pipeline question: are you integrating these structures downstream into property prediction models (like the GNN-based coercivity or anisotropy predictors mentioned in the materials-science gap analysis)? That would close the generation→evaluation loop and help surface the most promising compositions automatically.
Execution
Usage
16 callsView history