Spaces:
Runtime error
Runtime error
"""Util that calls WolframAlpha.""" | |
from typing import Any, Dict, Optional | |
from langchain_core.pydantic_v1 import BaseModel, Extra, root_validator | |
from langchain.utils import get_from_dict_or_env | |
class WolframAlphaAPIWrapper(BaseModel): | |
"""Wrapper for Wolfram Alpha. | |
Docs for using: | |
1. Go to wolfram alpha and sign up for a developer account | |
2. Create an app and get your APP ID | |
3. Save your APP ID into WOLFRAM_ALPHA_APPID env variable | |
4. pip install wolframalpha | |
""" | |
wolfram_client: Any #: :meta private: | |
wolfram_alpha_appid: Optional[str] = None | |
class Config: | |
"""Configuration for this pydantic object.""" | |
extra = Extra.forbid | |
def validate_environment(cls, values: Dict) -> Dict: | |
"""Validate that api key and python package exists in environment.""" | |
wolfram_alpha_appid = get_from_dict_or_env( | |
values, "wolfram_alpha_appid", "WOLFRAM_ALPHA_APPID" | |
) | |
values["wolfram_alpha_appid"] = wolfram_alpha_appid | |
try: | |
import wolframalpha | |
except ImportError: | |
raise ImportError( | |
"wolframalpha is not installed. " | |
"Please install it with `pip install wolframalpha`" | |
) | |
client = wolframalpha.Client(wolfram_alpha_appid) | |
values["wolfram_client"] = client | |
return values | |
def run(self, query: str) -> str: | |
"""Run query through WolframAlpha and parse result.""" | |
res = self.wolfram_client.query(query) | |
try: | |
assumption = next(res.pods).text | |
answer = next(res.results).text | |
except StopIteration: | |
return "Wolfram Alpha wasn't able to answer it" | |
if answer is None or answer == "": | |
# We don't want to return the assumption alone if answer is empty | |
return "No good Wolfram Alpha Result was found" | |
else: | |
return f"Assumption: {assumption} \nAnswer: {answer}" | |