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

Files changed (1) hide show
  1. 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
  # ============================================================================