wolframalpha.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import wolframalpha
  2. import requests
  3. from .logging import Logger
  4. from typing import Dict, List, Tuple, Generator, Optional
  5. class WolframAlpha:
  6. api_key: str
  7. logger: Logger
  8. client: wolframalpha.Client
  9. def __init__(self, api_key: str, logger: Optional[Logger] = None):
  10. self.api_key: str = api_key
  11. self.logger: Logger = logger or Logger()
  12. self.client = wolframalpha.Client(self.api_key)
  13. def generate_calculation_response(self, query: str, text: Optional[bool] = False, results_only: Optional[bool] = False) -> Generator[str | bytes, None, None]:
  14. self.logger.log(f"Querying WolframAlpha for {query}")
  15. response: wolframalpha.Result = self.client.query(query)
  16. for pod in response.pods if not results_only else response.results:
  17. self.logger.log(pod.keys(), "debug")
  18. if pod.title:
  19. yield "*" + pod.title + "*"
  20. for subpod in pod.subpods:
  21. self.logger.log(subpod.keys(), "debug")
  22. if subpod.title:
  23. yield "*" + subpod.title + "*"
  24. if subpod.img and not text:
  25. image = requests.get(subpod.img.src).content
  26. yield image
  27. elif subpod.plaintext:
  28. yield "```\n" + subpod.plaintext + "\n```"