Skip to content

Fix ROMAConfig serialization in ExecutionService and add free_tier config profile #74

@nguyenhuulocbb

Description

@nguyenhuulocbb

Fix ROMAConfig serialization in ExecutionService + add free_tier profile

Summary

Fixes #71

This PR fixes an error that occurs when creating executions using the API:

‘ROMAConfig’ object is not iterable

The root cause is that ExecutionService was attempting to serialize the full
ROMAConfig object using dict(config), which does not work for ROMAConfig
(Pydantic / OmegaConf-backed). This results in a 500 error during execution
initialization.

✔ Fix

Instead of calling:

dict(config)

The PR switches to:

from roma_dspy.config.utils import config_to_dict
config_to_dict(config)

This is consistent with how other components serialize structured configs in ROMA
and avoids the 'ROMAConfig' object is not iterable' crash.

✔ Added: free_tier profile

The README uses "config_profile": "free_tier" in its example API call, but the
repository does not contain a corresponding YAML profile.
This PR adds:

config/profiles/free_tier.yaml

based on general.yaml, allowing:

POST /api/v1/executions

to resolve the profile correctly.

⚠️ Note: A separate issue still remains regarding serialization of nested resilience configs (CheckpointConfig). This PR does not attempt to fix that.

After this fix, config loading and validation work, but execution creation still
fails with:

Value 'CheckpointConfig' is not a supported primitive type
full_key: checkpoint
object_type=ResilienceConfig

This appears to come from the serialization of nested resilience configs
(ResilienceConfigCheckpointConfig) when saving into execution metadata.

A separate issue has been opened with full logs and reproduction steps.

Reproduction

git clone https://github.com/sentient-agi/ROMA.git
cd ROMA
python3.12 -m venv .venv
source .venv/bin/activate
pip install -e ".[api]"

cp config/profiles/general.yaml config/profiles/free_tier.yaml

docker compose up -d
curl http://localhost:8000/health

curl -X POST http://localhost:8000/api/v1/executions \
  -H "Content-Type: application/json" \
  -d '{"goal": "test", "config_profile": "free_tier"}'

StatusFix applied and verified.
	•	Docker environment tested.
	•	Tests unrelated to resilience continue passing.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions