Selaa lähdekoodia

catch openai rate limit error (#7658)

tags/0.7.2
Jyong 1 vuosi sitten
vanhempi
commit
1473083a41
No account linked to committer's email address

+ 4
- 0
api/controllers/console/app/completion.py Näytä tiedosto

from controllers.console.app.wraps import get_app_model from controllers.console.app.wraps import get_app_model
from controllers.console.setup import setup_required from controllers.console.setup import setup_required
from controllers.console.wraps import account_initialization_required from controllers.console.wraps import account_initialization_required
from controllers.web.error import InvokeRateLimitError as InvokeRateLimitHttpError
from core.app.apps.base_app_queue_manager import AppQueueManager from core.app.apps.base_app_queue_manager import AppQueueManager
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.errors.error import ( from core.errors.error import (
from libs.login import login_required from libs.login import login_required
from models.model import AppMode from models.model import AppMode
from services.app_generate_service import AppGenerateService from services.app_generate_service import AppGenerateService
from services.errors.llm import InvokeRateLimitError




# define completion message api for user # define completion message api for user
raise ProviderQuotaExceededError() raise ProviderQuotaExceededError()
except ModelCurrentlyNotSupportError: except ModelCurrentlyNotSupportError:
raise ProviderModelCurrentlyNotSupportError() raise ProviderModelCurrentlyNotSupportError()
except InvokeRateLimitError as ex:
raise InvokeRateLimitHttpError(ex.description)
except InvokeError as e: except InvokeError as e:
raise CompletionRequestError(e.description) raise CompletionRequestError(e.description)
except (ValueError, AppInvokeQuotaExceededError) as e: except (ValueError, AppInvokeQuotaExceededError) as e:

+ 8
- 0
api/controllers/console/app/error.py Näytä tiedosto

error_code = "trace_config_check_error" error_code = "trace_config_check_error"
description = "Invalid Credentials." description = "Invalid Credentials."
code = 400 code = 400


class InvokeRateLimitError(BaseHTTPException):
"""Raised when the Invoke returns rate limit error."""

error_code = "rate_limit_error"
description = "Rate Limit Error"
code = 429

+ 4
- 0
api/controllers/web/completion.py Näytä tiedosto

ProviderNotInitializeError, ProviderNotInitializeError,
ProviderQuotaExceededError, ProviderQuotaExceededError,
) )
from controllers.web.error import InvokeRateLimitError as InvokeRateLimitHttpError
from controllers.web.wraps import WebApiResource from controllers.web.wraps import WebApiResource
from core.app.apps.base_app_queue_manager import AppQueueManager from core.app.apps.base_app_queue_manager import AppQueueManager
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from libs.helper import uuid_value from libs.helper import uuid_value
from models.model import AppMode from models.model import AppMode
from services.app_generate_service import AppGenerateService from services.app_generate_service import AppGenerateService
from services.errors.llm import InvokeRateLimitError




# define completion api for user # define completion api for user
raise ProviderQuotaExceededError() raise ProviderQuotaExceededError()
except ModelCurrentlyNotSupportError: except ModelCurrentlyNotSupportError:
raise ProviderModelCurrentlyNotSupportError() raise ProviderModelCurrentlyNotSupportError()
except InvokeRateLimitError as ex:
raise InvokeRateLimitHttpError(ex.description)
except InvokeError as e: except InvokeError as e:
raise CompletionRequestError(e.description) raise CompletionRequestError(e.description)
except ValueError as e: except ValueError as e:

+ 8
- 0
api/controllers/web/error.py Näytä tiedosto

error_code = "web_sso_auth_required" error_code = "web_sso_auth_required"
description = "Web SSO authentication required." description = "Web SSO authentication required."
code = 401 code = 401


class InvokeRateLimitError(BaseHTTPException):
"""Raised when the Invoke returns rate limit error."""

error_code = "rate_limit_error"
description = "Rate Limit Error"
code = 429

+ 5
- 0
api/core/errors/error.py Näytä tiedosto

Custom exception raised when the model not support Custom exception raised when the model not support
""" """
description = "Model Currently Not Support" description = "Model Currently Not Support"


class InvokeRateLimitError(Exception):
"""Raised when the Invoke returns rate limit error."""
description = "Rate Limit Error"

+ 5
- 0
api/services/app_generate_service.py Näytä tiedosto

from collections.abc import Generator from collections.abc import Generator
from typing import Any, Union from typing import Any, Union


from openai._exceptions import RateLimitError

from configs import dify_config from configs import dify_config
from core.app.apps.advanced_chat.app_generator import AdvancedChatAppGenerator from core.app.apps.advanced_chat.app_generator import AdvancedChatAppGenerator
from core.app.apps.agent_chat.app_generator import AgentChatAppGenerator from core.app.apps.agent_chat.app_generator import AgentChatAppGenerator
from core.app.entities.app_invoke_entities import InvokeFrom from core.app.entities.app_invoke_entities import InvokeFrom
from core.app.features.rate_limiting import RateLimit from core.app.features.rate_limiting import RateLimit
from models.model import Account, App, AppMode, EndUser from models.model import Account, App, AppMode, EndUser
from services.errors.llm import InvokeRateLimitError
from services.workflow_service import WorkflowService from services.workflow_service import WorkflowService




) )
else: else:
raise ValueError(f"Invalid app mode {app_model.mode}") raise ValueError(f"Invalid app mode {app_model.mode}")
except RateLimitError as e:
raise InvokeRateLimitError(str(e))
finally: finally:
if not streaming: if not streaming:
rate_limit.exit(request_id) rate_limit.exit(request_id)

+ 19
- 0
api/services/errors/llm.py Näytä tiedosto

from typing import Optional


class InvokeError(Exception):
"""Base class for all LLM exceptions."""

description: Optional[str] = None

def __init__(self, description: Optional[str] = None) -> None:
self.description = description

def __str__(self):
return self.description or self.__class__.__name__


class InvokeRateLimitError(InvokeError):
"""Raised when the Invoke returns rate limit error."""

description = "Rate Limit Error"

Loading…
Peruuta
Tallenna