hosted.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import os
  2. from typing import Optional
  3. import langchain
  4. from flask import Flask
  5. from pydantic import BaseModel
  6. class HostedOpenAI(BaseModel):
  7. api_base: str = None
  8. api_organization: str = None
  9. api_key: str
  10. quota_limit: int = 0
  11. """Quota limit for the openai hosted model. -1 means unlimited."""
  12. paid_enabled: bool = False
  13. paid_stripe_price_id: str = None
  14. paid_increase_quota: int = 1
  15. class HostedAzureOpenAI(BaseModel):
  16. api_base: str
  17. api_key: str
  18. quota_limit: int = 0
  19. """Quota limit for the azure openai hosted model. -1 means unlimited."""
  20. class HostedAnthropic(BaseModel):
  21. api_base: str = None
  22. api_key: str
  23. quota_limit: int = 0
  24. """Quota limit for the anthropic hosted model. -1 means unlimited."""
  25. paid_enabled: bool = False
  26. paid_stripe_price_id: str = None
  27. paid_increase_quota: int = 1000000
  28. paid_min_quantity: int = 20
  29. paid_max_quantity: int = 100
  30. class HostedModelProviders(BaseModel):
  31. openai: Optional[HostedOpenAI] = None
  32. azure_openai: Optional[HostedAzureOpenAI] = None
  33. anthropic: Optional[HostedAnthropic] = None
  34. hosted_model_providers = HostedModelProviders()
  35. class HostedModerationConfig(BaseModel):
  36. enabled: bool = False
  37. providers: list[str] = []
  38. class HostedConfig(BaseModel):
  39. moderation = HostedModerationConfig()
  40. hosted_config = HostedConfig()
  41. def init_app(app: Flask):
  42. if os.environ.get("DEBUG") and os.environ.get("DEBUG").lower() == 'true':
  43. langchain.verbose = True
  44. if app.config.get("HOSTED_OPENAI_ENABLED"):
  45. hosted_model_providers.openai = HostedOpenAI(
  46. api_base=app.config.get("HOSTED_OPENAI_API_BASE"),
  47. api_organization=app.config.get("HOSTED_OPENAI_API_ORGANIZATION"),
  48. api_key=app.config.get("HOSTED_OPENAI_API_KEY"),
  49. quota_limit=app.config.get("HOSTED_OPENAI_QUOTA_LIMIT"),
  50. paid_enabled=app.config.get("HOSTED_OPENAI_PAID_ENABLED"),
  51. paid_stripe_price_id=app.config.get("HOSTED_OPENAI_PAID_STRIPE_PRICE_ID"),
  52. paid_increase_quota=app.config.get("HOSTED_OPENAI_PAID_INCREASE_QUOTA"),
  53. )
  54. if app.config.get("HOSTED_AZURE_OPENAI_ENABLED"):
  55. hosted_model_providers.azure_openai = HostedAzureOpenAI(
  56. api_base=app.config.get("HOSTED_AZURE_OPENAI_API_BASE"),
  57. api_key=app.config.get("HOSTED_AZURE_OPENAI_API_KEY"),
  58. quota_limit=app.config.get("HOSTED_AZURE_OPENAI_QUOTA_LIMIT"),
  59. )
  60. if app.config.get("HOSTED_ANTHROPIC_ENABLED"):
  61. hosted_model_providers.anthropic = HostedAnthropic(
  62. api_base=app.config.get("HOSTED_ANTHROPIC_API_BASE"),
  63. api_key=app.config.get("HOSTED_ANTHROPIC_API_KEY"),
  64. quota_limit=app.config.get("HOSTED_ANTHROPIC_QUOTA_LIMIT"),
  65. paid_enabled=app.config.get("HOSTED_ANTHROPIC_PAID_ENABLED"),
  66. paid_stripe_price_id=app.config.get("HOSTED_ANTHROPIC_PAID_STRIPE_PRICE_ID"),
  67. paid_increase_quota=app.config.get("HOSTED_ANTHROPIC_PAID_INCREASE_QUOTA"),
  68. paid_min_quantity=app.config.get("HOSTED_ANTHROPIC_PAID_MIN_QUANTITY"),
  69. paid_max_quantity=app.config.get("HOSTED_ANTHROPIC_PAID_MAX_QUANTITY"),
  70. )
  71. if app.config.get("HOSTED_MODERATION_ENABLED") and app.config.get("HOSTED_MODERATION_PROVIDERS"):
  72. hosted_config.moderation = HostedModerationConfig(
  73. enabled=app.config.get("HOSTED_MODERATION_ENABLED"),
  74. providers=app.config.get("HOSTED_MODERATION_PROVIDERS").split(',')
  75. )