Spaces:
Runtime error
Runtime error
| """Response parser.""" | |
| import json | |
| import re | |
| from typing import Any | |
| from langchain_core.language_models import BaseLanguageModel | |
| from langchain_core.output_parsers import BaseOutputParser | |
| from langchain_core.prompts.prompt import PromptTemplate | |
| from langchain.chains.api.openapi.prompts import RESPONSE_TEMPLATE | |
| from langchain.chains.llm import LLMChain | |
| class APIResponderOutputParser(BaseOutputParser): | |
| """Parse the response and error tags.""" | |
| def _load_json_block(self, serialized_block: str) -> str: | |
| try: | |
| response_content = json.loads(serialized_block, strict=False) | |
| return response_content.get("response", "ERROR parsing response.") | |
| except json.JSONDecodeError: | |
| return "ERROR parsing response." | |
| except: | |
| raise | |
| def parse(self, llm_output: str) -> str: | |
| """Parse the response and error tags.""" | |
| json_match = re.search(r"```json(.*?)```", llm_output, re.DOTALL) | |
| if json_match: | |
| return self._load_json_block(json_match.group(1).strip()) | |
| else: | |
| raise ValueError(f"No response found in output: {llm_output}.") | |
| def _type(self) -> str: | |
| return "api_responder" | |
| class APIResponderChain(LLMChain): | |
| """Get the response parser.""" | |
| def from_llm( | |
| cls, llm: BaseLanguageModel, verbose: bool = True, **kwargs: Any | |
| ) -> LLMChain: | |
| """Get the response parser.""" | |
| output_parser = APIResponderOutputParser() | |
| prompt = PromptTemplate( | |
| template=RESPONSE_TEMPLATE, | |
| output_parser=output_parser, | |
| input_variables=["response", "instructions"], | |
| ) | |
| return cls(prompt=prompt, llm=llm, verbose=verbose, **kwargs) | |