feat: add checkpoint scanner integration to recipe scanner

- Add CheckpointScanner dependency to RecipeScanner singleton
- Implement checkpoint enrichment in recipe data processing
- Add _enrich_checkpoint_entry method to enhance checkpoint metadata
- Update recipe formatting to include checkpoint information
- Extend get_instance, __new__, and __init__ methods to support checkpoint scanner
- Add _get_checkpoint_from_version_index method for cache lookup

This enables recipe scanner to handle checkpoint models alongside existing LoRA support, providing complete model metadata for recipes.
This commit is contained in:
Will Miao
2025-11-21 15:36:54 +08:00
parent 4eb46a8d3e
commit 1971881537
4 changed files with 396 additions and 15 deletions

View File

@@ -588,6 +588,26 @@
padding-top: 4px; /* Add padding to prevent first item from being cut off when hovered */
}
.recipe-resources-list {
display: flex;
flex-direction: column;
gap: 10px;
flex: 1;
min-height: 0;
}
.recipe-checkpoint-container {
display: flex;
flex-direction: column;
gap: var(--space-1);
}
.version-divider {
height: 1px;
background: var(--border-color);
margin: var(--space-1) 0;
}
.recipe-lora-item {
display: flex;
gap: var(--space-2);
@@ -614,6 +634,13 @@
border-left: 4px solid var(--lora-accent);
}
.recipe-lora-item.checkpoint-item {
cursor: default;
padding-top: 8px;
padding-bottom: 8px;
align-items: center;
}
.recipe-lora-item.missing-locally {
border-left: 4px solid var(--lora-error);
}
@@ -962,6 +989,10 @@
z-index: 100;
}
.badge-container .resource-action {
margin-left: auto;
}
/* Add styles for missing LoRAs download feature */
.recipe-status.missing {
position: relative;
@@ -1004,3 +1035,61 @@
.recipe-status.clickable:hover {
background-color: rgba(var(--lora-warning-rgb, 255, 165, 0), 0.2);
}
.recipe-checkpoint-meta {
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: center;
font-size: 0.85em;
margin-bottom: 2px;
}
.recipe-checkpoint-meta .checkpoint-type {
background: var(--lora-surface);
padding: 2px 8px;
border-radius: var(--border-radius-xs);
color: var(--text-color);
}
.recipe-resource-actions {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
margin-top: 2px;
}
.resource-action {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 5px 10px;
border-radius: var(--border-radius-xs);
border: 1px solid var(--border-color);
background: var(--bg-color);
color: var(--text-color);
font-size: 0.9em;
cursor: pointer;
transition: background-color 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
}
.resource-action.compact {
padding: 4px 10px;
font-size: 0.88em;
}
.resource-action:hover {
background: var(--lora-surface);
transform: translateY(-1px);
}
.resource-action.primary {
background: var(--lora-accent);
color: white;
border-color: var(--lora-accent);
}
.resource-action.primary:hover {
background: color-mix(in oklch, var(--lora-accent), black 10%);
}