-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmodels.py
More file actions
127 lines (114 loc) · 3.04 KB
/
models.py
File metadata and controls
127 lines (114 loc) · 3.04 KB
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/usr/bin/env python3
"""
Shared data models for the MCP server and web interface
"""
from typing import List, Dict, Any, Optional, Union
from dataclasses import dataclass, field
from enum import Enum
from pydantic import BaseModel
class DatasetType(str, Enum):
WILDLIFE = "wildlife"
PLANTS = "plants"
PESTS = "pests"
CUSTOM = "custom"
class ModelType(str, Enum):
CLASSIFICATION = "classification"
DETECTION = "detection"
SEGMENTATION = "segmentation"
CUSTOM = "custom"
@dataclass
class SearchRequest:
"""Search request model"""
query: str = ""
category_filter: List[str] = field(default_factory=list)
species_filter: List[str] = field(default_factory=list)
time_filter: List[str] = field(default_factory=list)
season_filter: List[str] = field(default_factory=list)
action_filter: List[str] = field(default_factory=list)
plant_state_filter: List[str] = field(default_factory=list)
collection_filter: List[str] = field(default_factory=list)
limit: int = 50
offset: int = 0
@dataclass
class SearchResponse:
"""Search response model"""
results: List[Dict[str, Any]]
total_count: int
page: int
total_pages: int
limit: int
offset: int
query: str
filters_applied: Dict[str, Any]
@dataclass
class ImageResult:
"""Image result model"""
id: str
collection: str
category: str
image_url: str
metadata: Dict[str, Any]
relevance_score: Optional[float] = None
score_details: Optional[Dict[str, Any]] = None
@dataclass
class FilterOptions:
"""Available filter options"""
categories: List[str]
species: List[str]
times: List[str]
seasons: List[str]
actions: List[str]
plant_states: List[str]
collections: List[str]
@dataclass
class DatasetInfo:
"""Dataset information"""
name: str
type: DatasetType
description: str
total_images: int
collections: List[str]
available_filters: FilterOptions
metadata: Dict[str, Any]
@dataclass
class ModelInfo:
"""Model information"""
name: str
type: ModelType
description: str
version: str
supported_datasets: List[str]
parameters: Dict[str, Any]
metadata: Dict[str, Any]
@dataclass
class InferenceRequest:
"""Model inference request"""
dataset_name: str
model_name: str
image_ids: List[str]
parameters: Dict[str, Any] = field(default_factory=dict)
@dataclass
class InferenceResult:
"""Model inference result"""
model_name: str
dataset_name: str
results: List[Dict[str, Any]]
processing_time: float
metadata: Dict[str, Any]
# Pydantic models for API serialization
class SearchRequestAPI(BaseModel):
query: str = ""
category: List[str] = []
species: List[str] = []
time: List[str] = []
season: List[str] = []
action: List[str] = []
plant_state: List[str] = []
collection: List[str] = []
limit: int = 50
offset: int = 0
class InferenceRequestAPI(BaseModel):
dataset_name: str
model_name: str
image_ids: List[str]
parameters: Dict[str, Any] = {}