Amos Blanton
Maybe
4670a90
from typing import Any, Dict, Optional
from rich import print
from rich.markup import escape
from rich.panel import Panel
from .chains import get_retrieval_qa
def print_answer(text: str) -> None:
print(f"[bright_cyan]{escape(text)}", end="", flush=True)
def chat(config: Dict[str, Any], query: Optional[str] = None) -> None:
qa = get_retrieval_qa(config, callback=print_answer)
interactive = not query
print()
if interactive:
print("Type your query below and press Enter.")
print("Type 'exit' or 'quit' or 'q' to exit the application.\n")
while True:
print("[bold]Q: ", end="", flush=True)
if interactive:
query = input()
else:
print(escape(query))
print()
if query.strip() in ["exit", "quit", "q"]:
print("Exiting...\n")
break
print("[bold]A:", end="", flush=True)
res = qa(query)
if config["llm"] != "ctransformers":
print_answer(res["result"])
print()
for doc in res["source_documents"]:
source, content = doc.metadata["source"], doc.page_content
print(
Panel(
f"[bright_blue]{escape(source)}[/bright_blue]\n\n{escape(content)}"
)
)
print()
if not interactive:
break