Add local model asset catalog
GeoIntel CI / docs-smoke (push) Has been cancelled
GeoIntel CI / contract-smoke (push) Has been cancelled

This commit is contained in:
Codex
2026-07-06 20:59:03 +02:00
parent 9e20cc82ae
commit 6e2a8cbdc4
33 changed files with 660 additions and 7 deletions
@@ -7,6 +7,7 @@ import type {
DetectionRead,
DetectionRunRead,
DetectionRunResponse,
ModelAssetRead,
QualityCheckRead,
YoloPreflightResponse,
} from '../types'
@@ -28,10 +29,13 @@ export function useDetectionWorkflow({
loadQualityChecks,
}: DetectionWorkflowOptions) {
const [detectionModels, setDetectionModels] = useState<DetectionModelCapability[]>([])
const [modelAssets, setModelAssets] = useState<ModelAssetRead[]>([])
const [loadingDetectionModels, setLoadingDetectionModels] = useState(false)
const [detectionModelError, setDetectionModelError] = useState<string | null>(null)
const [modelAssetError, setModelAssetError] = useState<string | null>(null)
const [selectedDetectionDatasetId, setSelectedDetectionDatasetId] = useState('')
const [selectedDetectionModelId, setSelectedDetectionModelId] = useState('yolo-placeholder')
const [selectedModelAssetId, setSelectedModelAssetId] = useState('')
const [detectionTileManifestPath, setDetectionTileManifestPath] = useState('')
const [detectionConfidenceThreshold, setDetectionConfidenceThreshold] = useState(0.5)
const [runningDetection, setRunningDetection] = useState(false)
@@ -55,6 +59,7 @@ export function useDetectionWorkflow({
const loadDetectionModels = async () => {
setLoadingDetectionModels(true)
setDetectionModelError(null)
setModelAssetError(null)
try {
const response = await detectionApi.listModels()
setDetectionModels(response.models)
@@ -63,6 +68,17 @@ export function useDetectionWorkflow({
}
} catch (error) {
setDetectionModelError(formatError(error, 'Failed to load detection models'))
}
try {
const assetResponse = await detectionApi.listModelAssets()
setModelAssets(assetResponse.items)
const activeAsset = assetResponse.items.find((asset) => asset.active) ?? assetResponse.items[0] ?? null
if (!assetResponse.items.some((asset) => asset.model_asset_id === selectedModelAssetId)) {
setSelectedModelAssetId(activeAsset?.model_asset_id ?? '')
}
} catch (error) {
setModelAssets([])
setModelAssetError(formatError(error, 'Failed to load local model assets'))
} finally {
setLoadingDetectionModels(false)
}
@@ -74,6 +90,7 @@ export function useDetectionWorkflow({
try {
const response = await detectionApi.getYoloPreflight({
tile_manifest_path: tileManifestPath.trim() || null,
model_asset_id: selectedModelAssetId || null,
})
setYoloPreflight(response)
} catch (error) {
@@ -143,6 +160,7 @@ export function useDetectionWorkflow({
project_id: selectedProjectId,
dataset_id: datasetId,
model_id: selectedDetectionModelId,
model_asset_id: selectedModelAssetId || null,
confidence_threshold: detectionConfidenceThreshold,
tile_manifest_path: detectionTileManifestPath.trim() || null,
parameters_json: {},
@@ -198,10 +216,13 @@ export function useDetectionWorkflow({
return {
detectionModels,
modelAssets,
loadingDetectionModels,
detectionModelError,
modelAssetError,
selectedDetectionDatasetId,
selectedDetectionModelId,
selectedModelAssetId,
detectionTileManifestPath,
detectionConfidenceThreshold,
runningDetection,
@@ -230,6 +251,7 @@ export function useDetectionWorkflow({
resetDetectionForProject,
setSelectedDetectionDatasetId,
setSelectedDetectionModelId,
setSelectedModelAssetId,
setDetectionTileManifestPath,
setDetectionConfidenceThreshold,
setSelectedDetectionRunId,