Skip to content
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
bc450e1
Add parameter estimation service migration plan
jcschaff Apr 8, 2026
1931a6d
Add optimization job database schema, DTOs, and service layer
jcschaff Apr 8, 2026
3c99032
Add REST endpoints for parameter estimation optimization
jcschaff Apr 8, 2026
51973af
Refactor optimization job ID from UUID to bigint database sequence key
jcschaff Apr 8, 2026
2c328d3
Add GET /api/v1/optimization endpoint to list user's optimization jobs
jcschaff Apr 8, 2026
2ddc778
Add ActiveMQ messaging for optimization job dispatch and status
jcschaff Apr 8, 2026
c748e86
Add JMS queue listener for optimization requests on vcell-submit side
jcschaff Apr 8, 2026
2e6211e
Consolidate optimization message types into vcell-core
jcschaff Apr 8, 2026
36d4316
Add Quarkus integration tests for optimization REST endpoints
jcschaff Apr 8, 2026
90c24b4
Consolidate OpenAPI scripts and regenerate clients with optimization …
jcschaff Apr 8, 2026
7d62d42
Add generated-client tests for optimization API
jcschaff Apr 8, 2026
5fa8d8b
Update desktop client to use generated OptimizationResourceApi
jcschaff Apr 8, 2026
248681b
Connect optimization queue listener to Artemis broker
jcschaff Apr 8, 2026
14bbfbc
Fix CI test failure: make parest data dir configurable
jcschaff Apr 8, 2026
1a8f1b0
Fix CodeQL path traversal warnings in optimization job handler
jcschaff Apr 8, 2026
9d625bb
Add E2E test for optimization and refactor solver for testability
jcschaff Apr 8, 2026
91dbd42
Add database design patterns documentation
jcschaff Apr 9, 2026
08c488b
Add OptJobTable and comply with VCell database conventions
jcschaff Apr 9, 2026
093ce26
Configure AMQP connection to Artemis broker
jcschaff Apr 9, 2026
6275a14
Fix export tests: use ManagedExecutor for CDI context propagation
jcschaff Apr 9, 2026
370bf7b
Parallelize Docker image builds with matrix strategy
jcschaff Apr 9, 2026
a65e4d7
Fix CI: upload all Maven target dirs, full rebuild for rest/exporter
jcschaff Apr 9, 2026
35de69d
Fix AMQP address mapping and JDBC resource leaks in optimization service
jcschaff Apr 9, 2026
cf58741
Add Artemis broker config to vcell-submit Dockerfile
jcschaff Apr 10, 2026
0003cfb
Add ANYCAST capabilities to AMQP channels for Artemis cross-protocol …
jcschaff Apr 10, 2026
0e4f1f3
Add cross-protocol integration test for optimization AMQP messaging
jcschaff Apr 10, 2026
b66c49d
Fix CI: remove unused ActiveMQ import from QuarkusStartUpTasks
jcschaff Apr 10, 2026
1897d7f
Fix progress reporting for all active optimization states
jcschaff Apr 10, 2026
4f157bc
Update parameter estimation design doc with deployment learnings
jcschaff Apr 10, 2026
b7ac2e5
Fix COPASI progress buffering and remove broken mkdir in SlurmProxy
jcschaff Apr 11, 2026
fd99ebb
Add requirements section and post-migration notes to design doc
jcschaff Apr 11, 2026
629888a
Upgrade COPASI/basico and modernize vcell-opt Docker image
jcschaff Apr 11, 2026
98e1a67
Remove legacy optimization socket server and /api/v0/optimization end…
jcschaff Apr 11, 2026
fb928f9
Remove dead vcell.submit.service.host property and Dockerfile reference
jcschaff Apr 11, 2026
a7c832b
Rewrite parameter estimation design doc as maintenance reference
jcschaff Apr 11, 2026
f5b526b
Increase optimization polling timeout from 200 seconds to 10 minutes
jcschaff Apr 11, 2026
58a59f1
Fix CodeQL path traversal warnings in SlurmProxy and test stub
jcschaff Apr 12, 2026
496547e
Fix CodeQL partial path traversal alert #226
jcschaff Apr 15, 2026
bcce9a9
Merge remote-tracking branch 'origin/master' into parest-bug
jcschaff Apr 15, 2026
7d68604
Fail fast when notarytool submit fails
jcschaff Apr 15, 2026
e57a07c
Restore executable permission on langevin_x64 in batch container
jcschaff Apr 15, 2026
3dd1bd9
Replace docker:// with pre-built Apptainer SIF for SLURM containers
jcschaff Apr 17, 2026
c7fa4ee
Fix setup-apptainer action reference in CI
jcschaff Apr 17, 2026
f20257c
Update apptainer doc to reflect direct NFS mount approach
jcschaff Apr 18, 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
13 changes: 8 additions & 5 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,17 @@ mvn compile test-compile -pl vcell-rest -am

## OpenAPI Client Generation

OpenAPI spec is generated by Quarkus SmallRye OpenAPI from `vcell-rest` and stored in `tools/openapi.yaml`. Three clients are auto-generated:
OpenAPI spec is generated by Quarkus SmallRye OpenAPI from `vcell-rest` and stored in `tools/openapi.yaml`. Three clients are auto-generated (Java, Python, TypeScript-Angular) using OpenAPI Generator v7.1.0.

```bash
cd tools
./generate.sh # Generates Java, Python, and TypeScript-Angular clients
# Generate clients from existing tools/openapi.yaml (if spec is already up to date)
./tools/openapi-clients.sh

# Rebuild vcell-rest, regenerate the OpenAPI spec, then generate all clients
./tools/openapi-clients.sh --update-spec
```

- **Java client:** `vcell-restclient/` (OpenAPI Generator v7.1.0)
- **Java client:** `vcell-restclient/`
- **Python client:** `python-restclient/`
- **Angular client:** `webapp-ng/src/app/core/modules/openapi/`

Expand Down Expand Up @@ -124,7 +127,7 @@ GitHub Actions (`.github/workflows/ci_cd.yml`):
After major changes (especially removing/renaming user-facing features):

- [ ] Check `vcell-client/UserDocumentation/` for references to changed features. This is an ad-hoc XML format compiled into JavaHelp (in-app help) and HTML published at https://vcell.org/webstart/VCell_Tutorials/VCell_Help/index.html. Update documentation to stay consistent with code.
- [ ] After regenerating OpenAPI clients (`tools/generate.sh`), compile downstream: `mvn compile test-compile -pl vcell-rest -am`
- [ ] After regenerating OpenAPI clients (`tools/openapi-clients.sh`), compile downstream: `mvn compile test-compile -pl vcell-rest -am`

## Conventions

Expand Down
337 changes: 337 additions & 0 deletions docs/parameter-estimation-service.md

Large diffs are not rendered by default.

51 changes: 51 additions & 0 deletions python-restclient/.openapi-generator/FILES
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ docs/BiomodelRef.md
docs/CompositeCurve.md
docs/ControlPointCurve.md
docs/Coordinate.md
docs/CopasiOptimizationMethod.md
docs/CopasiOptimizationMethodOptimizationMethodType.md
docs/CopasiOptimizationParameter.md
docs/CopasiOptimizationParameterDataType.md
docs/CopasiOptimizationParameterParamType.md
docs/Curve.md
docs/CurveSelectionInfo.md
docs/DataIdentifier.md
Expand Down Expand Up @@ -54,11 +59,21 @@ docs/MathType.md
docs/MathmodelRef.md
docs/ModelType.md
docs/N5ExportRequest.md
docs/OptJobStatus.md
docs/OptProblem.md
docs/OptProgressItem.md
docs/OptProgressReport.md
docs/OptResultSet.md
docs/OptimizationJobStatus.md
docs/OptimizationResourceApi.md
docs/Origin.md
docs/ParameterDescription.md
docs/Publication.md
docs/PublicationInfo.md
docs/PublicationResourceApi.md
docs/PublishModelsRequest.md
docs/ReferenceVariable.md
docs/ReferenceVariableReferenceVariableType.md
docs/SPECIALCLAIM.md
docs/SampledCurve.md
docs/SchedulerStatus.md
Expand Down Expand Up @@ -97,9 +112,28 @@ docs/VariableDomain.md
docs/VariableMode.md
docs/VariableSpecs.md
docs/VariableType.md
docs/Vcellopt.md
docs/VcelloptStatus.md
docs/Version.md
docs/VersionFlag.md
test/__init__.py
test/test_copasi_optimization_method.py
test/test_copasi_optimization_method_optimization_method_type.py
test/test_copasi_optimization_parameter.py
test/test_copasi_optimization_parameter_data_type.py
test/test_copasi_optimization_parameter_param_type.py
test/test_opt_job_status.py
test/test_opt_problem.py
test/test_opt_progress_item.py
test/test_opt_progress_report.py
test/test_opt_result_set.py
test/test_optimization_job_status.py
test/test_optimization_resource_api.py
test/test_parameter_description.py
test/test_reference_variable.py
test/test_reference_variable_reference_variable_type.py
test/test_vcellopt.py
test/test_vcellopt_status.py
tox.ini
vcell_client/__init__.py
vcell_client/api/__init__.py
Expand All @@ -110,6 +144,7 @@ vcell_client/api/field_data_resource_api.py
vcell_client/api/geometry_resource_api.py
vcell_client/api/hello_world_api.py
vcell_client/api/math_model_resource_api.py
vcell_client/api/optimization_resource_api.py
vcell_client/api/publication_resource_api.py
vcell_client/api/simulation_resource_api.py
vcell_client/api/solver_resource_api.py
Expand All @@ -132,6 +167,11 @@ vcell_client/models/biomodel_ref.py
vcell_client/models/composite_curve.py
vcell_client/models/control_point_curve.py
vcell_client/models/coordinate.py
vcell_client/models/copasi_optimization_method.py
vcell_client/models/copasi_optimization_method_optimization_method_type.py
vcell_client/models/copasi_optimization_parameter.py
vcell_client/models/copasi_optimization_parameter_data_type.py
vcell_client/models/copasi_optimization_parameter_param_type.py
vcell_client/models/curve.py
vcell_client/models/curve_selection_info.py
vcell_client/models/data_identifier.py
Expand Down Expand Up @@ -166,10 +206,19 @@ vcell_client/models/math_type.py
vcell_client/models/mathmodel_ref.py
vcell_client/models/model_type.py
vcell_client/models/n5_export_request.py
vcell_client/models/opt_job_status.py
vcell_client/models/opt_problem.py
vcell_client/models/opt_progress_item.py
vcell_client/models/opt_progress_report.py
vcell_client/models/opt_result_set.py
vcell_client/models/optimization_job_status.py
vcell_client/models/origin.py
vcell_client/models/parameter_description.py
vcell_client/models/publication.py
vcell_client/models/publication_info.py
vcell_client/models/publish_models_request.py
vcell_client/models/reference_variable.py
vcell_client/models/reference_variable_reference_variable_type.py
vcell_client/models/sampled_curve.py
vcell_client/models/scheduler_status.py
vcell_client/models/simulation_execution_status_record.py
Expand Down Expand Up @@ -204,6 +253,8 @@ vcell_client/models/variable_type.py
vcell_client/models/vc_document_type.py
vcell_client/models/vc_image_summary.py
vcell_client/models/vc_simulation_identifier.py
vcell_client/models/vcellopt.py
vcell_client/models/vcellopt_status.py
vcell_client/models/version.py
vcell_client/models/version_flag.py
vcell_client/py.typed
Expand Down
20 changes: 20 additions & 0 deletions python-restclient/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,10 @@ Class | Method | HTTP request | Description
*MathModelResourceApi* | [**get_summary**](docs/MathModelResourceApi.md#get_summary) | **GET** /api/v1/mathModel/summary/{id} |
*MathModelResourceApi* | [**get_vcml**](docs/MathModelResourceApi.md#get_vcml) | **GET** /api/v1/mathModel/{id} |
*MathModelResourceApi* | [**save_math_model**](docs/MathModelResourceApi.md#save_math_model) | **POST** /api/v1/mathModel |
*OptimizationResourceApi* | [**get_optimization_status**](docs/OptimizationResourceApi.md#get_optimization_status) | **GET** /api/v1/optimization/{optId} | Get status, progress, or results of an optimization job
*OptimizationResourceApi* | [**list_optimization_jobs**](docs/OptimizationResourceApi.md#list_optimization_jobs) | **GET** /api/v1/optimization | List optimization jobs for the authenticated user
*OptimizationResourceApi* | [**stop_optimization**](docs/OptimizationResourceApi.md#stop_optimization) | **POST** /api/v1/optimization/{optId}/stop | Stop a running optimization job
*OptimizationResourceApi* | [**submit_optimization**](docs/OptimizationResourceApi.md#submit_optimization) | **POST** /api/v1/optimization | Submit a new parameter estimation optimization job
*PublicationResourceApi* | [**create_publication**](docs/PublicationResourceApi.md#create_publication) | **POST** /api/v1/publications | Create publication
*PublicationResourceApi* | [**delete_publication**](docs/PublicationResourceApi.md#delete_publication) | **DELETE** /api/v1/publications/{id} | Delete publication
*PublicationResourceApi* | [**get_publication_by_id**](docs/PublicationResourceApi.md#get_publication_by_id) | **GET** /api/v1/publications/{id} | Get publication by ID
Expand Down Expand Up @@ -160,6 +164,11 @@ Class | Method | HTTP request | Description
- [CompositeCurve](docs/CompositeCurve.md)
- [ControlPointCurve](docs/ControlPointCurve.md)
- [Coordinate](docs/Coordinate.md)
- [CopasiOptimizationMethod](docs/CopasiOptimizationMethod.md)
- [CopasiOptimizationMethodOptimizationMethodType](docs/CopasiOptimizationMethodOptimizationMethodType.md)
- [CopasiOptimizationParameter](docs/CopasiOptimizationParameter.md)
- [CopasiOptimizationParameterDataType](docs/CopasiOptimizationParameterDataType.md)
- [CopasiOptimizationParameterParamType](docs/CopasiOptimizationParameterParamType.md)
- [Curve](docs/Curve.md)
- [CurveSelectionInfo](docs/CurveSelectionInfo.md)
- [DataIdentifier](docs/DataIdentifier.md)
Expand Down Expand Up @@ -194,10 +203,19 @@ Class | Method | HTTP request | Description
- [MathmodelRef](docs/MathmodelRef.md)
- [ModelType](docs/ModelType.md)
- [N5ExportRequest](docs/N5ExportRequest.md)
- [OptJobStatus](docs/OptJobStatus.md)
- [OptProblem](docs/OptProblem.md)
- [OptProgressItem](docs/OptProgressItem.md)
- [OptProgressReport](docs/OptProgressReport.md)
- [OptResultSet](docs/OptResultSet.md)
- [OptimizationJobStatus](docs/OptimizationJobStatus.md)
- [Origin](docs/Origin.md)
- [ParameterDescription](docs/ParameterDescription.md)
- [Publication](docs/Publication.md)
- [PublicationInfo](docs/PublicationInfo.md)
- [PublishModelsRequest](docs/PublishModelsRequest.md)
- [ReferenceVariable](docs/ReferenceVariable.md)
- [ReferenceVariableReferenceVariableType](docs/ReferenceVariableReferenceVariableType.md)
- [SPECIALCLAIM](docs/SPECIALCLAIM.md)
- [SampledCurve](docs/SampledCurve.md)
- [SchedulerStatus](docs/SchedulerStatus.md)
Expand Down Expand Up @@ -232,6 +250,8 @@ Class | Method | HTTP request | Description
- [VariableMode](docs/VariableMode.md)
- [VariableSpecs](docs/VariableSpecs.md)
- [VariableType](docs/VariableType.md)
- [Vcellopt](docs/Vcellopt.md)
- [VcelloptStatus](docs/VcelloptStatus.md)
- [Version](docs/Version.md)
- [VersionFlag](docs/VersionFlag.md)

Expand Down
29 changes: 29 additions & 0 deletions python-restclient/docs/CopasiOptimizationMethod.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# CopasiOptimizationMethod


## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**optimization_method_type** | [**CopasiOptimizationMethodOptimizationMethodType**](CopasiOptimizationMethodOptimizationMethodType.md) | | [optional]
**optimization_parameter** | [**List[CopasiOptimizationParameter]**](CopasiOptimizationParameter.md) | | [optional]

## Example

```python
from vcell_client.models.copasi_optimization_method import CopasiOptimizationMethod

# TODO update the JSON string below
json = "{}"
# create an instance of CopasiOptimizationMethod from a JSON string
copasi_optimization_method_instance = CopasiOptimizationMethod.from_json(json)
# print the JSON string representation of the object
print CopasiOptimizationMethod.to_json()

# convert the object into a dict
copasi_optimization_method_dict = copasi_optimization_method_instance.to_dict()
# create an instance of CopasiOptimizationMethod from a dict
copasi_optimization_method_form_dict = copasi_optimization_method.from_dict(copasi_optimization_method_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# CopasiOptimizationMethodOptimizationMethodType


## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


30 changes: 30 additions & 0 deletions python-restclient/docs/CopasiOptimizationParameter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# CopasiOptimizationParameter


## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**data_type** | [**CopasiOptimizationParameterDataType**](CopasiOptimizationParameterDataType.md) | | [optional]
**param_type** | [**CopasiOptimizationParameterParamType**](CopasiOptimizationParameterParamType.md) | | [optional]
**value** | **float** | | [optional]

## Example

```python
from vcell_client.models.copasi_optimization_parameter import CopasiOptimizationParameter

# TODO update the JSON string below
json = "{}"
# create an instance of CopasiOptimizationParameter from a JSON string
copasi_optimization_parameter_instance = CopasiOptimizationParameter.from_json(json)
# print the JSON string representation of the object
print CopasiOptimizationParameter.to_json()

# convert the object into a dict
copasi_optimization_parameter_dict = copasi_optimization_parameter_instance.to_dict()
# create an instance of CopasiOptimizationParameter from a dict
copasi_optimization_parameter_form_dict = copasi_optimization_parameter.from_dict(copasi_optimization_parameter_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


10 changes: 10 additions & 0 deletions python-restclient/docs/CopasiOptimizationParameterDataType.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# CopasiOptimizationParameterDataType


## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


10 changes: 10 additions & 0 deletions python-restclient/docs/CopasiOptimizationParameterParamType.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# CopasiOptimizationParameterParamType


## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


10 changes: 10 additions & 0 deletions python-restclient/docs/OptJobStatus.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# OptJobStatus


## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------

[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


33 changes: 33 additions & 0 deletions python-restclient/docs/OptProblem.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# OptProblem


## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**copasi_optimization_method** | [**CopasiOptimizationMethod**](CopasiOptimizationMethod.md) | | [optional]
**data_set** | **List[List[float]]** | | [optional]
**math_model_sbml_contents** | **str** | | [optional]
**number_of_optimization_runs** | **int** | | [optional]
**parameter_description_list** | [**List[ParameterDescription]**](ParameterDescription.md) | | [optional]
**reference_variable** | [**List[ReferenceVariable]**](ReferenceVariable.md) | | [optional]

## Example

```python
from vcell_client.models.opt_problem import OptProblem

# TODO update the JSON string below
json = "{}"
# create an instance of OptProblem from a JSON string
opt_problem_instance = OptProblem.from_json(json)
# print the JSON string representation of the object
print OptProblem.to_json()

# convert the object into a dict
opt_problem_dict = opt_problem_instance.to_dict()
# create an instance of OptProblem from a dict
opt_problem_form_dict = opt_problem.from_dict(opt_problem_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


29 changes: 29 additions & 0 deletions python-restclient/docs/OptProgressItem.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# OptProgressItem


## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**num_function_evaluations** | **int** | | [optional]
**obj_func_value** | **float** | | [optional]

## Example

```python
from vcell_client.models.opt_progress_item import OptProgressItem

# TODO update the JSON string below
json = "{}"
# create an instance of OptProgressItem from a JSON string
opt_progress_item_instance = OptProgressItem.from_json(json)
# print the JSON string representation of the object
print OptProgressItem.to_json()

# convert the object into a dict
opt_progress_item_dict = opt_progress_item_instance.to_dict()
# create an instance of OptProgressItem from a dict
opt_progress_item_form_dict = opt_progress_item.from_dict(opt_progress_item_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


29 changes: 29 additions & 0 deletions python-restclient/docs/OptProgressReport.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# OptProgressReport


## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**best_param_values** | **Dict[str, float]** | | [optional]
**progress_items** | [**List[OptProgressItem]**](OptProgressItem.md) | | [optional]

## Example

```python
from vcell_client.models.opt_progress_report import OptProgressReport

# TODO update the JSON string below
json = "{}"
# create an instance of OptProgressReport from a JSON string
opt_progress_report_instance = OptProgressReport.from_json(json)
# print the JSON string representation of the object
print OptProgressReport.to_json()

# convert the object into a dict
opt_progress_report_dict = opt_progress_report_instance.to_dict()
# create an instance of OptProgressReport from a dict
opt_progress_report_form_dict = opt_progress_report.from_dict(opt_progress_report_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


Loading
Loading