Refactor backend to support interface-definition driven model resources
- Introduce a new model structure for managing interface definitions and model resources, enhancing the backend's capability to handle various service integrations. - Update the Makefile to reflect changes in database seeding and resource management commands. - Remove the deprecated credentials management routes and replace them with a unified model registry API. - Modify existing routes and schemas to align with the new model structure, ensuring seamless integration with the frontend. - Enhance database seeding scripts to populate new model resources and their configurations. - Update README documentation to reflect the new architecture and usage instructions for model resources and interface definitions.
This commit is contained in:
@@ -25,3 +25,23 @@ def resolve_incoming_key(incoming: str | None, stored: str) -> str:
|
||||
if incoming is None or incoming == "" or is_masked(incoming):
|
||||
return stored
|
||||
return incoming
|
||||
|
||||
|
||||
def mask_secrets(value):
|
||||
"""Recursively mask every scalar in a model resource secrets object."""
|
||||
if isinstance(value, dict):
|
||||
return {key: mask_secrets(item) for key, item in value.items()}
|
||||
if isinstance(value, list):
|
||||
return [mask_secrets(item) for item in value]
|
||||
return mask(str(value)) if value is not None else ""
|
||||
|
||||
|
||||
def merge_secrets(incoming: dict, stored: dict) -> dict:
|
||||
"""Merge secret fields while treating masked/empty values as keep-existing."""
|
||||
result = dict(stored or {})
|
||||
for key, value in (incoming or {}).items():
|
||||
if isinstance(value, dict) and isinstance(result.get(key), dict):
|
||||
result[key] = merge_secrets(value, result[key])
|
||||
elif value not in (None, "") and not is_masked(str(value)):
|
||||
result[key] = value
|
||||
return result
|
||||
|
||||
Reference in New Issue
Block a user