File size: 1,507 Bytes
8a28a8d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
"""Fluxus-compatible feature schema endpoint."""

from .common import _CHAIN_FEATURES_PATH, _load_yaml
from .error_schema import make_not_found_error, make_validation_error


def handle_get_chain_schema(chain_type: str) -> dict:
    if not chain_type:
        return make_validation_error(
            "Parameter 'chain_type' is required.",
            missing_fields=["chain_type"],
        )

    chain_features = _load_yaml(_CHAIN_FEATURES_PATH)
    resolved = chain_type if chain_type in chain_features else None
    if resolved is None:
        for feature_name, feature_data in chain_features.items():
            aliases = feature_data.get("chains")
            if aliases == chain_type or (
                isinstance(aliases, list) and chain_type in aliases
            ):
                resolved = feature_name
                break

    if resolved is None:
        return make_not_found_error("chain_type", chain_type)

    chain_data = chain_features[resolved]
    return {
        "feature_name": chain_type,
        "canonical_feature_name": resolved,
        "chains": chain_data.get("chains", resolved),
        "display_name": chain_data.get("display_name", resolved),
        "description": chain_data.get("description", ""),
        "supported_tasks": chain_data.get("supported_tasks", []),
        "max_count": chain_data.get("max_count", 1),
        "usage_guideline": chain_data.get("usage_guideline", ""),
        "parameters_schema": chain_data.get("parameters_schema", {}),
    }