langgenius / dify

Dify is an open-source LLM app development platform. Dify's intuitive interface combines AI workflow, RAG pipeline, agent capabilities, model management, observability features and more, letting you quickly go from prototype to production.
https://dify.ai
Other
35.79k stars 4.83k forks source link

Load balancer has conflict #5193

Open AndyMik90 opened 2 weeks ago

AndyMik90 commented 2 weeks ago

Self Checks

Dify version

0.6.10

Cloud or Self Hosted

Self Hosted (Docker), Self Hosted (Source)

Steps to reproduce

UserWarning: Field "model_load_balancingenabled" has conflict with protected namespace "model".

You may be able to resolve this warning by setting model_config['protected_namespaces'] = ().

✔️ Expected Behavior

No response

❌ Actual Behavior

No response

dosubot[bot] commented 2 weeks ago

To resolve the conflict with the load balancer in your self-hosted Dify version 0.6.10 setup, which is causing the warning about the "model_load_balancingenabled" field conflicting with the protected namespace "model", you need to ensure that the field names do not conflict with reserved or protected namespaces.

In the provided code, the ProviderManager class has methods that interact with the ProviderConfiguration object, which likely contains the model_load_balancing_enabled field. To avoid the conflict, you should rename the field to something that does not start with the protected namespace "model_".

For example, you can rename model_load_balancing_enabled to load_balancing_enabled in the ProviderConfiguration class and update all references to this field accordingly.

Here is an example of how you might update the ProviderConfiguration class and the ProviderManager methods:

Update in ProviderConfiguration class:

class ProviderConfiguration:
    # Other fields and methods...

    def enable_load_balancing(self, model: str, model_type: ModelType) -> None:
        self.load_balancing_enabled = True
        # Additional logic...

    def disable_load_balancing(self, model: str, model_type: ModelType) -> None:
        self.load_balancing_enabled = False
        # Additional logic...

Update in ProviderManager class:

class ProviderManager:

    def enable_model_load_balancing(self, tenant_id: str, provider: str, model: str, model_type: str) -> None:
        provider_configurations = self.get_configurations(tenant_id)
        provider_configuration = provider_configurations.get(provider)
        if not provider_configuration:
            raise ValueError(f"Provider {provider} does not exist.")
        provider_configuration.enable_load_balancing(model=model, model_type=ModelType.value_of(model_type))

    def disable_model_load_balancing(self, tenant_id: str, provider: str, model: str, model_type: str) -> None:
        provider_configurations = self.get_configurations(tenant_id)
        provider_configuration = provider_configurations.get(provider)
        if not provider_configuration:
            raise ValueError(f"Provider {provider} does not exist.")
        provider_configuration.disable_load_balancing(model=model, model_type=ModelType.value_of(model_type))

    def get_load_balancing_configs(self, tenant_id: str, provider: str, model: str, model_type: str) -> tuple[bool, list[dict]]:
        provider_configurations = self.get_configurations(tenant_id)
        provider_configuration = provider_configurations.get(provider)
        if not provider_configuration:
            raise ValueError(f"Provider {provider} does not exist.")
        model_type = ModelType.value_of(model_type)
        provider_model_setting = provider_configuration.get_provider_model_setting(model_type=model_type, model=model)
        is_load_balancing_enabled = provider_model_setting and provider_model_setting.load_balancing_enabled
        # Additional logic to fetch load balancing configs...

By renaming the field and updating the references, you should be able to resolve the conflict with the protected namespace "model_" [1][2].

To continue talking to Dosu, mention @dosu.

takatost commented 2 weeks ago

Already fixed, thx! https://github.com/langgenius/dify/blob/8e2f8ffb9e2e96d54f43b7038363cbe82ee166b0/api/services/feature_service.py#L32-L35