guohanghui commited on
Commit
c8e33af
·
verified ·
1 Parent(s): 982b641

Update osmnx/mcp_output/mcp_plugin/mcp_service.py

Browse files
osmnx/mcp_output/mcp_plugin/mcp_service.py CHANGED
@@ -1,45 +1,273 @@
1
  from fastmcp import FastMCP
2
 
3
  # Create the FastMCP service application
4
- mcp = FastMCP("osmnx_service")
5
 
6
- @mcp.tool(name="get_graph_from_place", description="Retrieve a graph from a place name using OSMnx")
7
- def get_graph_from_place(place_name: str, network_type: str = "drive") -> dict:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  """
9
- Retrieve a graph representation of a place using OSMnx.
10
 
11
  Parameters:
12
- - place_name: Name of the place to retrieve the graph for
13
- - network_type: Type of network to retrieve (e.g., 'drive', 'walk', 'bike')
14
 
15
  Returns:
16
- - dict: Information about the retrieved graph
17
  """
18
  try:
19
- import osmnx as ox
20
- graph = ox.graph_from_place(place_name, network_type=network_type)
 
 
21
  return {
22
  "success": True,
23
- "graph_info": str(graph)
 
 
24
  }
25
  except Exception as e:
26
  return {"success": False, "error": str(e)}
27
 
28
- @mcp.tool(name="plot_graph", description="Plot a graph using OSMnx")
29
- def plot_graph(graph_data: dict) -> dict:
 
30
  """
31
- Plot a graph using OSMnx.
32
 
33
  Parameters:
34
- - graph_data: Serialized graph data to plot
 
35
 
36
  Returns:
37
- - dict: Status of the plotting operation
38
  """
39
  try:
40
- import osmnx as ox
41
- graph = ox.io.load_graphml(graph_data)
42
- ox.plot_graph(graph)
43
- return {"success": True}
 
 
 
 
 
44
  except Exception as e:
45
- return {"success": False, "error": str(e)}
 
 
 
 
 
 
 
 
 
 
 
1
  from fastmcp import FastMCP
2
 
3
  # Create the FastMCP service application
4
+ mcp = FastMCP("agml_service")
5
 
6
+
7
+ @mcp.tool(name="list_available_datasets", description="List all available AgML public datasets")
8
+ def list_available_datasets() -> dict:
9
+ """
10
+ List all available public datasets in AgML.
11
+
12
+ Returns:
13
+ - dict: A dictionary with success status and list of available datasets.
14
+ """
15
+ try:
16
+ from agml.data.public import public_data_sources
17
+ datasets = list(public_data_sources().keys())
18
+ return {
19
+ "success": True,
20
+ "datasets": datasets,
21
+ "count": len(datasets)
22
+ }
23
+ except Exception as e:
24
+ return {"success": False, "error": str(e)}
25
+
26
+
27
+ @mcp.tool(name="get_dataset_info", description="Get information about a specific dataset")
28
+ def get_dataset_info(dataset_name: str) -> dict:
29
+ """
30
+ Get detailed information about a specific AgML dataset.
31
+
32
+ Parameters:
33
+ - dataset_name: Name of the dataset (e.g., 'bean_disease_uganda')
34
+
35
+ Returns:
36
+ - dict: Dataset information including task, location, classes, etc.
37
+ """
38
+ try:
39
+ from agml.data.public import public_data_sources
40
+ sources = public_data_sources()
41
+
42
+ if dataset_name not in sources:
43
+ return {
44
+ "success": False,
45
+ "error": f"Dataset '{dataset_name}' not found. Use list_available_datasets to see available options."
46
+ }
47
+
48
+ info = sources[dataset_name]
49
+ return {
50
+ "success": True,
51
+ "dataset_name": dataset_name,
52
+ "info": info
53
+ }
54
+ except Exception as e:
55
+ return {"success": False, "error": str(e)}
56
+
57
+
58
+ @mcp.tool(name="load_dataset", description="Load an AgML dataset")
59
+ def load_dataset(dataset_name: str, batch_size: int = 8) -> dict:
60
+ """
61
+ Load an AgML dataset.
62
+
63
+ Parameters:
64
+ - dataset_name: Name of the dataset to load
65
+ - batch_size: Batch size for data loading (default: 8)
66
+
67
+ Returns:
68
+ - dict: Information about the loaded dataset
69
+ """
70
+ try:
71
+ from agml.data import AgMLDataLoader
72
+
73
+ loader = AgMLDataLoader(dataset_name)
74
+
75
+ return {
76
+ "success": True,
77
+ "dataset_name": dataset_name,
78
+ "task_type": str(loader.info['task_type']),
79
+ "num_images": loader.num_images,
80
+ "num_classes": getattr(loader, 'num_classes', None),
81
+ "classes": getattr(loader, 'classes', None)
82
+ }
83
+ except Exception as e:
84
+ return {"success": False, "error": str(e)}
85
+
86
+
87
+ @mcp.tool(name="download_dataset", description="Download a public AgML dataset")
88
+ def download_dataset(dataset_name: str) -> dict:
89
+ """
90
+ Download a public dataset from AgML.
91
+
92
+ Parameters:
93
+ - dataset_name: Name of the dataset to download
94
+
95
+ Returns:
96
+ - dict: Download status information
97
+ """
98
+ try:
99
+ from agml.data.public import download_public_dataset
100
+
101
+ download_public_dataset(dataset_name)
102
+
103
+ return {
104
+ "success": True,
105
+ "message": f"Dataset '{dataset_name}' downloaded successfully"
106
+ }
107
+ except Exception as e:
108
+ return {"success": False, "error": str(e)}
109
+
110
+
111
+ @mcp.tool(name="list_model_benchmarks", description="List available model benchmarks")
112
+ def list_model_benchmarks() -> dict:
113
+ """
114
+ List all available model benchmarks in AgML.
115
+
116
+ Returns:
117
+ - dict: Available model benchmarks by task type
118
+ """
119
+ try:
120
+ from agml.models.benchmarks import list_model_benchmarks
121
+
122
+ benchmarks = list_model_benchmarks()
123
+
124
+ return {
125
+ "success": True,
126
+ "benchmarks": benchmarks
127
+ }
128
+ except Exception as e:
129
+ return {"success": False, "error": str(e)}
130
+
131
+
132
+ @mcp.tool(name="get_model_benchmark", description="Get benchmark results for a specific model")
133
+ def get_model_benchmark(model_name: str, dataset_name: str) -> dict:
134
+ """
135
+ Get benchmark results for a specific model on a dataset.
136
+
137
+ Parameters:
138
+ - model_name: Name of the model
139
+ - dataset_name: Name of the dataset
140
+
141
+ Returns:
142
+ - dict: Benchmark results
143
+ """
144
+ try:
145
+ from agml.models.benchmarks import get_model_benchmark
146
+
147
+ result = get_model_benchmark(model_name, dataset_name)
148
+
149
+ return {
150
+ "success": True,
151
+ "model": model_name,
152
+ "dataset": dataset_name,
153
+ "benchmark": result
154
+ }
155
+ except Exception as e:
156
+ return {"success": False, "error": str(e)}
157
+
158
+
159
+ @mcp.tool(name="create_classification_model", description="Create an AgML classification model")
160
+ def create_classification_model(model_name: str, num_classes: int) -> dict:
161
+ """
162
+ Create an AgML classification model.
163
+
164
+ Parameters:
165
+ - model_name: Name of the model architecture (e.g., 'resnet18', 'efficientnet_b0')
166
+ - num_classes: Number of classes for classification
167
+
168
+ Returns:
169
+ - dict: Model creation status and information
170
+ """
171
+ try:
172
+ from agml.models import ClassificationModel
173
+
174
+ model = ClassificationModel(model_name=model_name, num_classes=num_classes)
175
+
176
+ return {
177
+ "success": True,
178
+ "model_name": model_name,
179
+ "num_classes": num_classes,
180
+ "message": "Model created successfully"
181
+ }
182
+ except Exception as e:
183
+ return {"success": False, "error": str(e)}
184
+
185
+
186
+ @mcp.tool(name="create_detection_model", description="Create an AgML object detection model")
187
+ def create_detection_model(model_name: str, num_classes: int) -> dict:
188
+ """
189
+ Create an AgML object detection model.
190
+
191
+ Parameters:
192
+ - model_name: Name of the model architecture (e.g., 'fasterrcnn_resnet50_fpn')
193
+ - num_classes: Number of classes for detection
194
+
195
+ Returns:
196
+ - dict: Model creation status and information
197
+ """
198
+ try:
199
+ from agml.models import DetectionModel
200
+
201
+ model = DetectionModel(model_name=model_name, num_classes=num_classes)
202
+
203
+ return {
204
+ "success": True,
205
+ "model_name": model_name,
206
+ "num_classes": num_classes,
207
+ "message": "Model created successfully"
208
+ }
209
+ except Exception as e:
210
+ return {"success": False, "error": str(e)}
211
+
212
+
213
+ @mcp.tool(name="create_segmentation_model", description="Create an AgML segmentation model")
214
+ def create_segmentation_model(model_name: str, num_classes: int) -> dict:
215
  """
216
+ Create an AgML segmentation model.
217
 
218
  Parameters:
219
+ - model_name: Name of the model architecture (e.g., 'deeplabv3_resnet50')
220
+ - num_classes: Number of classes for segmentation
221
 
222
  Returns:
223
+ - dict: Model creation status and information
224
  """
225
  try:
226
+ from agml.models import SegmentationModel
227
+
228
+ model = SegmentationModel(model_name=model_name, num_classes=num_classes)
229
+
230
  return {
231
  "success": True,
232
+ "model_name": model_name,
233
+ "num_classes": num_classes,
234
+ "message": "Model created successfully"
235
  }
236
  except Exception as e:
237
  return {"success": False, "error": str(e)}
238
 
239
+
240
+ @mcp.tool(name="export_dataset_to_yolo", description="Export AgML dataset to YOLO format")
241
+ def export_dataset_to_yolo(dataset_name: str, output_dir: str) -> dict:
242
  """
243
+ Export an AgML dataset to YOLO format.
244
 
245
  Parameters:
246
+ - dataset_name: Name of the dataset to export
247
+ - output_dir: Directory where to save the YOLO formatted data
248
 
249
  Returns:
250
+ - dict: Export status
251
  """
252
  try:
253
+ from agml.data import AgMLDataLoader
254
+
255
+ loader = AgMLDataLoader(dataset_name)
256
+ loader.export_to_yolo(output_dir)
257
+
258
+ return {
259
+ "success": True,
260
+ "message": f"Dataset exported to YOLO format at {output_dir}"
261
+ }
262
  except Exception as e:
263
+ return {"success": False, "error": str(e)}
264
+
265
+
266
+ def create_app() -> FastMCP:
267
+ """
268
+ Create and return the FastMCP application instance.
269
+
270
+ Returns:
271
+ - FastMCP: The FastMCP application instance.
272
+ """
273
+ return mcp