perplexity.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. from typing import Any
  2. import requests
  3. from core.tools.errors import ToolProviderCredentialValidationError
  4. from core.tools.provider.builtin.perplexity.tools.perplexity_search import PERPLEXITY_API_URL
  5. from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
  6. class PerplexityProvider(BuiltinToolProviderController):
  7. def _validate_credentials(self, credentials: dict[str, Any]) -> None:
  8. headers = {
  9. "Authorization": f"Bearer {credentials.get('perplexity_api_key')}",
  10. "Content-Type": "application/json",
  11. }
  12. payload = {
  13. "model": "llama-3.1-sonar-small-128k-online",
  14. "messages": [
  15. {"role": "system", "content": "You are a helpful assistant."},
  16. {"role": "user", "content": "Hello"},
  17. ],
  18. "max_tokens": 5,
  19. "temperature": 0.1,
  20. "top_p": 0.9,
  21. "stream": False,
  22. }
  23. try:
  24. response = requests.post(PERPLEXITY_API_URL, json=payload, headers=headers)
  25. response.raise_for_status()
  26. except requests.RequestException as e:
  27. raise ToolProviderCredentialValidationError(f"Failed to validate Perplexity API key: {str(e)}")
  28. if response.status_code != 200:
  29. raise ToolProviderCredentialValidationError(
  30. f"Perplexity API key is invalid. Status code: {response.status_code}"
  31. )