Browse Source

fix: #18744 The model order defined in position.yaml in the Model Plugin is not taking effect. (#18756)

tags/1.3.1
bravomark 6 months ago
parent
commit
9bcc8041e9
No account linked to committer's email address

+ 19
- 1
api/core/entities/provider_configuration.py View File

provider_models = [m for m in provider_models if m.status == ModelStatus.ACTIVE] provider_models = [m for m in provider_models if m.status == ModelStatus.ACTIVE]


# resort provider_models # resort provider_models
return sorted(provider_models, key=lambda x: x.model_type.value)
# Optimize sorting logic: first sort by provider.position order, then by model_type.value
# Get the position list for model types (retrieve only once for better performance)
model_type_positions = {}
if hasattr(self.provider, "position") and self.provider.position:
model_type_positions = self.provider.position

def get_sort_key(model: ModelWithProviderEntity):
# Get the position list for the current model type
positions = model_type_positions.get(model.model_type.value, [])

# If the model name is in the position list, use its index for sorting
# Otherwise use a large value (list length) to place undefined models at the end
position_index = positions.index(model.model) if model.model in positions else len(positions)

# Return composite sort key: (model_type value, model position index)
return (model.model_type.value, position_index)

# Sort using the composite sort key
return sorted(provider_models, key=get_sort_key)


def _get_system_provider_models( def _get_system_provider_models(
self, self,

+ 3
- 0
api/core/model_runtime/entities/provider_entities.py View File

# pydantic configs # pydantic configs
model_config = ConfigDict(protected_namespaces=()) model_config = ConfigDict(protected_namespaces=())


# position from plugin _position.yaml
position: Optional[dict[str, list[str]]] = {}

@field_validator("models", mode="before") @field_validator("models", mode="before")
@classmethod @classmethod
def validate_models(cls, v): def validate_models(cls, v):

Loading…
Cancel
Save