Mandark-droid
commited on
Commit
·
0c0a9f1
1
Parent(s):
58b13d7
Fix JSON response format in MCP tools
Browse files- Add default=str parameter to all json.dumps() calls
- Ensures proper JSON serialization with double quotes
- Fixes JSONDecodeError when agent parses run_get_dataset responses
- Applied to get_dataset, get_leaderboard_data, get_trace_data, get_cost_data
- mcp_tools.py +10 -10
mcp_tools.py
CHANGED
|
@@ -760,7 +760,7 @@ async def get_dataset(
|
|
| 760 |
"dataset_repo": dataset_repo,
|
| 761 |
"error": "Only datasets with 'smoltrace-' prefix are allowed. Please use smoltrace-leaderboard or other smoltrace-* datasets.",
|
| 762 |
"data": []
|
| 763 |
-
}, indent=2)
|
| 764 |
|
| 765 |
# Load dataset from HuggingFace
|
| 766 |
# Use user-provided token or fall back to environment variable
|
|
@@ -774,7 +774,7 @@ async def get_dataset(
|
|
| 774 |
"error": "Dataset is empty",
|
| 775 |
"total_rows": 0,
|
| 776 |
"data": []
|
| 777 |
-
}, indent=2)
|
| 778 |
|
| 779 |
# Get total row count before limiting
|
| 780 |
total_rows = len(df)
|
|
@@ -807,7 +807,7 @@ async def get_dataset(
|
|
| 807 |
"dataset_repo": dataset_repo,
|
| 808 |
"error": f"Failed to load dataset: {str(e)}",
|
| 809 |
"data": []
|
| 810 |
-
}, indent=2)
|
| 811 |
|
| 812 |
|
| 813 |
# ============================================================================
|
|
@@ -848,13 +848,13 @@ def get_leaderboard_data(repo: str = "kshitijthakkar/smoltrace-leaderboard", hf_
|
|
| 848 |
"total_runs": len(data),
|
| 849 |
"repository": repo,
|
| 850 |
"data": data
|
| 851 |
-
}, indent=2)
|
| 852 |
|
| 853 |
except Exception as e:
|
| 854 |
return json.dumps({
|
| 855 |
"error": str(e),
|
| 856 |
"repository": repo
|
| 857 |
-
})
|
| 858 |
|
| 859 |
|
| 860 |
@gr.mcp.resource("trace://{trace_id}/{repo}")
|
|
@@ -894,7 +894,7 @@ def get_trace_data(trace_id: str, repo: str, hf_token: Optional[str] = None) ->
|
|
| 894 |
"error": f"Trace {trace_id} not found",
|
| 895 |
"trace_id": trace_id,
|
| 896 |
"repository": repo
|
| 897 |
-
})
|
| 898 |
|
| 899 |
trace_row = trace_data.iloc[0]
|
| 900 |
|
|
@@ -908,14 +908,14 @@ def get_trace_data(trace_id: str, repo: str, hf_token: Optional[str] = None) ->
|
|
| 908 |
"repository": repo,
|
| 909 |
"run_id": trace_row.get('run_id', 'unknown'),
|
| 910 |
"spans": spans
|
| 911 |
-
}, indent=2)
|
| 912 |
|
| 913 |
except Exception as e:
|
| 914 |
return json.dumps({
|
| 915 |
"error": str(e),
|
| 916 |
"trace_id": trace_id,
|
| 917 |
"repository": repo
|
| 918 |
-
})
|
| 919 |
|
| 920 |
|
| 921 |
@gr.mcp.resource("cost://model/{model_name}")
|
|
@@ -989,14 +989,14 @@ def get_cost_data(model_name: str) -> str:
|
|
| 989 |
"cost_data": model_cost,
|
| 990 |
"hardware_options": hardware_costs,
|
| 991 |
"currency": "USD"
|
| 992 |
-
}, indent=2)
|
| 993 |
else:
|
| 994 |
return json.dumps({
|
| 995 |
"model": model_name,
|
| 996 |
"error": "Model not found in cost database",
|
| 997 |
"available_models": list(llm_costs.keys()),
|
| 998 |
"hardware_options": hardware_costs
|
| 999 |
-
}, indent=2)
|
| 1000 |
|
| 1001 |
|
| 1002 |
# ============================================================================
|
|
|
|
| 760 |
"dataset_repo": dataset_repo,
|
| 761 |
"error": "Only datasets with 'smoltrace-' prefix are allowed. Please use smoltrace-leaderboard or other smoltrace-* datasets.",
|
| 762 |
"data": []
|
| 763 |
+
}, indent=2, default=str)
|
| 764 |
|
| 765 |
# Load dataset from HuggingFace
|
| 766 |
# Use user-provided token or fall back to environment variable
|
|
|
|
| 774 |
"error": "Dataset is empty",
|
| 775 |
"total_rows": 0,
|
| 776 |
"data": []
|
| 777 |
+
}, indent=2, default=str)
|
| 778 |
|
| 779 |
# Get total row count before limiting
|
| 780 |
total_rows = len(df)
|
|
|
|
| 807 |
"dataset_repo": dataset_repo,
|
| 808 |
"error": f"Failed to load dataset: {str(e)}",
|
| 809 |
"data": []
|
| 810 |
+
}, indent=2, default=str)
|
| 811 |
|
| 812 |
|
| 813 |
# ============================================================================
|
|
|
|
| 848 |
"total_runs": len(data),
|
| 849 |
"repository": repo,
|
| 850 |
"data": data
|
| 851 |
+
}, indent=2, default=str)
|
| 852 |
|
| 853 |
except Exception as e:
|
| 854 |
return json.dumps({
|
| 855 |
"error": str(e),
|
| 856 |
"repository": repo
|
| 857 |
+
}, indent=2, default=str)
|
| 858 |
|
| 859 |
|
| 860 |
@gr.mcp.resource("trace://{trace_id}/{repo}")
|
|
|
|
| 894 |
"error": f"Trace {trace_id} not found",
|
| 895 |
"trace_id": trace_id,
|
| 896 |
"repository": repo
|
| 897 |
+
}, indent=2, default=str)
|
| 898 |
|
| 899 |
trace_row = trace_data.iloc[0]
|
| 900 |
|
|
|
|
| 908 |
"repository": repo,
|
| 909 |
"run_id": trace_row.get('run_id', 'unknown'),
|
| 910 |
"spans": spans
|
| 911 |
+
}, indent=2, default=str)
|
| 912 |
|
| 913 |
except Exception as e:
|
| 914 |
return json.dumps({
|
| 915 |
"error": str(e),
|
| 916 |
"trace_id": trace_id,
|
| 917 |
"repository": repo
|
| 918 |
+
}, indent=2, default=str)
|
| 919 |
|
| 920 |
|
| 921 |
@gr.mcp.resource("cost://model/{model_name}")
|
|
|
|
| 989 |
"cost_data": model_cost,
|
| 990 |
"hardware_options": hardware_costs,
|
| 991 |
"currency": "USD"
|
| 992 |
+
}, indent=2, default=str)
|
| 993 |
else:
|
| 994 |
return json.dumps({
|
| 995 |
"model": model_name,
|
| 996 |
"error": "Model not found in cost database",
|
| 997 |
"available_models": list(llm_costs.keys()),
|
| 998 |
"hardware_options": hardware_costs
|
| 999 |
+
}, indent=2, default=str)
|
| 1000 |
|
| 1001 |
|
| 1002 |
# ============================================================================
|