|
from typing import Any, Optional |
|
from langchain.chains import LLMChain |
|
from langchain.base_language import BaseLanguageModel |
|
from langchain.schema import LLMResult, PromptValue |
|
from langchain.prompts import PromptTemplate |
|
from langchain.memory.chat_memory import BaseMemory |
|
from langchain.chat_models import ChatOpenAI |
|
|
|
from promopts import CONTENT_RE_WRIGHT_PROMPT, FEEDBACK_PROMPT |
|
|
|
|
|
class HumanFeedBackChain(LLMChain): |
|
"""Chain to run queries against LLMs.""" |
|
|
|
memory: Optional[BaseMemory] = None |
|
|
|
def __init__(self, verbose=True, llm: BaseLanguageModel = ChatOpenAI(temperature=0.7), memory: Optional[BaseMemory] = None, prompt: PromptTemplate = FEEDBACK_PROMPT): |
|
super().__init__(llm=llm, prompt=prompt, memory=memory, verbose=verbose) |
|
|
|
def run(self, *args: Any, **kwargs: Any) -> str: |
|
"""Run the chain as text in, text out or multiple variables, text out.""" |
|
if len(self.output_keys) != 1: |
|
raise ValueError( |
|
f"`run` not supported when there is not exactly " |
|
f"one output key. Got {self.output_keys}." |
|
) |
|
|
|
if args and not kwargs: |
|
if len(args) != 1: |
|
raise ValueError( |
|
"`run` supports only one positional argument.") |
|
return self("Answer:" + args[0])[self.output_keys[0]] |
|
|
|
if kwargs and not args: |
|
return self(kwargs)[self.output_keys[0]] |
|
|
|
raise ValueError( |
|
f"`run` supported with either positional arguments or keyword arguments" |
|
f" but not both. Got args: {args} and kwargs: {kwargs}." |
|
) |
|
|
|
|
|
contextRewriteChain = LLMChain(llm=ChatOpenAI(temperature=0.7), prompt=CONTENT_RE_WRIGHT_PROMPT) |