openai_model_provider.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. # coding=utf-8
  2. """
  3. @project: maxkb
  4. @Author:虎
  5. @file: openai_model_provider.py
  6. @date:2024/3/28 16:26
  7. @desc:
  8. """
  9. import os
  10. from common.utils.common import get_file_content
  11. from models_provider.base_model_provider import IModelProvider, ModelProvideInfo, ModelInfo, \
  12. ModelTypeConst, ModelInfoManage
  13. from models_provider.impl.openai_model_provider.credential.embedding import OpenAIEmbeddingCredential
  14. from models_provider.impl.openai_model_provider.credential.image import OpenAIImageModelCredential
  15. from models_provider.impl.openai_model_provider.credential.llm import OpenAILLMModelCredential
  16. from models_provider.impl.openai_model_provider.credential.stt import OpenAISTTModelCredential
  17. from models_provider.impl.openai_model_provider.credential.tti import OpenAITextToImageModelCredential
  18. from models_provider.impl.openai_model_provider.credential.tts import OpenAITTSModelCredential
  19. from models_provider.impl.openai_model_provider.model.embedding import OpenAIEmbeddingModel
  20. from models_provider.impl.openai_model_provider.model.image import OpenAIImage
  21. from models_provider.impl.openai_model_provider.model.llm import OpenAIChatModel
  22. from models_provider.impl.openai_model_provider.model.stt import OpenAISpeechToText
  23. from models_provider.impl.openai_model_provider.model.tti import OpenAITextToImage
  24. from models_provider.impl.openai_model_provider.model.tts import OpenAITextToSpeech
  25. from maxkb.conf import PROJECT_DIR
  26. from django.utils.translation import gettext_lazy as _
  27. openai_llm_model_credential = OpenAILLMModelCredential()
  28. openai_stt_model_credential = OpenAISTTModelCredential()
  29. openai_tts_model_credential = OpenAITTSModelCredential()
  30. openai_image_model_credential = OpenAIImageModelCredential()
  31. openai_tti_model_credential = OpenAITextToImageModelCredential()
  32. model_info_list = [
  33. ModelInfo('gpt-3.5-turbo', _('The latest gpt-3.5-turbo, updated with OpenAI adjustments'), ModelTypeConst.LLM,
  34. openai_llm_model_credential, OpenAIChatModel
  35. ),
  36. ModelInfo('gpt-4', _('Latest gpt-4, updated with OpenAI adjustments'), ModelTypeConst.LLM, openai_llm_model_credential,
  37. OpenAIChatModel),
  38. ModelInfo('gpt-4o', _('The latest GPT-4o, cheaper and faster than gpt-4-turbo, updated with OpenAI adjustments'),
  39. ModelTypeConst.LLM, openai_llm_model_credential,
  40. OpenAIChatModel),
  41. ModelInfo('gpt-4o-mini', _('The latest gpt-4o-mini, cheaper and faster than gpt-4o, updated with OpenAI adjustments'),
  42. ModelTypeConst.LLM, openai_llm_model_credential,
  43. OpenAIChatModel),
  44. ModelInfo('gpt-4-turbo', _('The latest gpt-4-turbo, updated with OpenAI adjustments'), ModelTypeConst.LLM,
  45. openai_llm_model_credential,
  46. OpenAIChatModel),
  47. ModelInfo('gpt-4-turbo-preview', _('The latest gpt-4-turbo-preview, updated with OpenAI adjustments'),
  48. ModelTypeConst.LLM, openai_llm_model_credential,
  49. OpenAIChatModel),
  50. ModelInfo('gpt-3.5-turbo-0125',
  51. _('gpt-3.5-turbo snapshot on January 25, 2024, supporting context length 16,385 tokens'), ModelTypeConst.LLM,
  52. openai_llm_model_credential,
  53. OpenAIChatModel),
  54. ModelInfo('gpt-3.5-turbo-1106',
  55. _('gpt-3.5-turbo snapshot on November 6, 2023, supporting context length 16,385 tokens'), ModelTypeConst.LLM,
  56. openai_llm_model_credential,
  57. OpenAIChatModel),
  58. ModelInfo('gpt-3.5-turbo-0613',
  59. _('[Legacy] gpt-3.5-turbo snapshot on June 13, 2023, will be deprecated on June 13, 2024'),
  60. ModelTypeConst.LLM, openai_llm_model_credential,
  61. OpenAIChatModel),
  62. ModelInfo('gpt-4o-2024-05-13',
  63. _('gpt-4o snapshot on May 13, 2024, supporting context length 128,000 tokens'),
  64. ModelTypeConst.LLM, openai_llm_model_credential,
  65. OpenAIChatModel),
  66. ModelInfo('gpt-4-turbo-2024-04-09',
  67. _('gpt-4-turbo snapshot on April 9, 2024, supporting context length 128,000 tokens'),
  68. ModelTypeConst.LLM, openai_llm_model_credential,
  69. OpenAIChatModel),
  70. ModelInfo('gpt-4-0125-preview', _('gpt-4-turbo snapshot on January 25, 2024, supporting context length 128,000 tokens'),
  71. ModelTypeConst.LLM, openai_llm_model_credential,
  72. OpenAIChatModel),
  73. ModelInfo('gpt-4-1106-preview', _('gpt-4-turbo snapshot on November 6, 2023, supporting context length 128,000 tokens'),
  74. ModelTypeConst.LLM, openai_llm_model_credential,
  75. OpenAIChatModel),
  76. ModelInfo('whisper-1', '',
  77. ModelTypeConst.STT, openai_stt_model_credential,
  78. OpenAISpeechToText),
  79. ModelInfo('tts-1', '',
  80. ModelTypeConst.TTS, openai_tts_model_credential,
  81. OpenAITextToSpeech)
  82. ]
  83. open_ai_embedding_credential = OpenAIEmbeddingCredential()
  84. model_info_embedding_list = [
  85. ModelInfo('text-embedding-ada-002', '',
  86. ModelTypeConst.EMBEDDING, open_ai_embedding_credential,
  87. OpenAIEmbeddingModel),
  88. ModelInfo('text-embedding-3-small', '',
  89. ModelTypeConst.EMBEDDING, open_ai_embedding_credential,
  90. OpenAIEmbeddingModel),
  91. ModelInfo('text-embedding-3-large', '',
  92. ModelTypeConst.EMBEDDING, open_ai_embedding_credential,
  93. OpenAIEmbeddingModel)
  94. ]
  95. model_info_image_list = [
  96. ModelInfo('gpt-4o', _('The latest GPT-4o, cheaper and faster than gpt-4-turbo, updated with OpenAI adjustments'),
  97. ModelTypeConst.IMAGE, openai_image_model_credential,
  98. OpenAIImage),
  99. ModelInfo('gpt-4o-mini', _('The latest gpt-4o-mini, cheaper and faster than gpt-4o, updated with OpenAI adjustments'),
  100. ModelTypeConst.IMAGE, openai_image_model_credential,
  101. OpenAIImage),
  102. ]
  103. model_info_tti_list = [
  104. ModelInfo('dall-e-3', '',
  105. ModelTypeConst.TTI, openai_tti_model_credential,
  106. OpenAITextToImage),
  107. ]
  108. model_info_manage = (
  109. ModelInfoManage.builder()
  110. .append_model_info_list(model_info_list)
  111. .append_default_model_info(ModelInfo('gpt-3.5-turbo', _('The latest gpt-3.5-turbo, updated with OpenAI adjustments'), ModelTypeConst.LLM,
  112. openai_llm_model_credential, OpenAIChatModel
  113. ))
  114. .append_model_info_list(model_info_embedding_list)
  115. .append_default_model_info(model_info_embedding_list[0])
  116. .append_model_info_list(model_info_image_list)
  117. .append_default_model_info(model_info_image_list[0])
  118. .append_model_info_list(model_info_tti_list)
  119. .append_default_model_info(model_info_tti_list[0])
  120. .append_default_model_info(ModelInfo('whisper-1', '',
  121. ModelTypeConst.STT, openai_stt_model_credential,
  122. OpenAISpeechToText)
  123. )
  124. .append_default_model_info(ModelInfo('tts-1', '',
  125. ModelTypeConst.TTS, openai_tts_model_credential,
  126. OpenAITextToSpeech))
  127. .build()
  128. )
  129. class OpenAIModelProvider(IModelProvider):
  130. def get_model_info_manage(self):
  131. return model_info_manage
  132. def get_model_provide_info(self):
  133. return ModelProvideInfo(provider='model_openai_provider', name='OpenAI', icon=get_file_content(
  134. os.path.join(PROJECT_DIR, "apps", 'models_provider', 'impl', 'openai_model_provider', 'icon',
  135. 'openai_icon_svg')))