Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

remote_retrieval.py 2.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import logging
  2. from typing import Optional
  3. import requests
  4. from configs import dify_config
  5. from services.rag_pipeline.pipeline_template.database.database_retrieval import DatabasePipelineTemplateRetrieval
  6. from services.rag_pipeline.pipeline_template.pipeline_template_base import PipelineTemplateRetrievalBase
  7. from services.rag_pipeline.pipeline_template.pipeline_template_type import PipelineTemplateType
  8. logger = logging.getLogger(__name__)
  9. class RemotePipelineTemplateRetrieval(PipelineTemplateRetrievalBase):
  10. """
  11. Retrieval recommended app from dify official
  12. """
  13. def get_pipeline_template_detail(self, template_id: str):
  14. try:
  15. result = self.fetch_pipeline_template_detail_from_dify_official(template_id)
  16. except Exception as e:
  17. logger.warning("fetch recommended app detail from dify official failed: %r, switch to database.", e)
  18. result = DatabasePipelineTemplateRetrieval.fetch_pipeline_template_detail_from_db(template_id)
  19. return result
  20. def get_pipeline_templates(self, language: str) -> dict:
  21. try:
  22. result = self.fetch_pipeline_templates_from_dify_official(language)
  23. except Exception as e:
  24. logger.warning("fetch pipeline templates from dify official failed: %r, switch to database.", e)
  25. result = DatabasePipelineTemplateRetrieval.fetch_pipeline_templates_from_db(language)
  26. return result
  27. def get_type(self) -> str:
  28. return PipelineTemplateType.REMOTE
  29. @classmethod
  30. def fetch_pipeline_template_detail_from_dify_official(cls, template_id: str) -> Optional[dict]:
  31. """
  32. Fetch pipeline template detail from dify official.
  33. :param template_id: Pipeline ID
  34. :return:
  35. """
  36. domain = dify_config.HOSTED_FETCH_PIPELINE_TEMPLATES_REMOTE_DOMAIN
  37. url = f"{domain}/pipeline-templates/{template_id}"
  38. response = requests.get(url, timeout=(3, 10))
  39. if response.status_code != 200:
  40. return None
  41. data: dict = response.json()
  42. return data
  43. @classmethod
  44. def fetch_pipeline_templates_from_dify_official(cls, language: str) -> dict:
  45. """
  46. Fetch pipeline templates from dify official.
  47. :param language: language
  48. :return:
  49. """
  50. domain = dify_config.HOSTED_FETCH_PIPELINE_TEMPLATES_REMOTE_DOMAIN
  51. url = f"{domain}/pipeline-templates?language={language}"
  52. response = requests.get(url, timeout=(3, 10))
  53. if response.status_code != 200:
  54. raise ValueError(f"fetch pipeline templates failed, status code: {response.status_code}")
  55. result: dict = response.json()
  56. return result