diff --git a/src/khoj/interface/web/chat.html b/src/khoj/interface/web/chat.html index 07253b06..cba6eb2d 100644 --- a/src/khoj/interface/web/chat.html +++ b/src/khoj/interface/web/chat.html @@ -50,9 +50,7 @@ document.getElementById("chat-input").value = ""; // Generate backend API URL to execute query - url = type_ === "chat" - ? `/api/beta/chat?q=${encodeURIComponent(query)}` - : `/api/beta/summarize?q=${encodeURIComponent(query)}`; + url = `/api/beta/${type_}?q=${encodeURIComponent(query)}`; // Call specified Khoj API fetch(url) @@ -112,8 +110,8 @@ diff --git a/src/khoj/processor/conversation/gpt.py b/src/khoj/processor/conversation/gpt.py index c942e08d..a10b3c85 100644 --- a/src/khoj/processor/conversation/gpt.py +++ b/src/khoj/processor/conversation/gpt.py @@ -10,6 +10,34 @@ import openai from khoj.utils.constants import empty_escape_sequences +def answer(text, user_query, model, api_key=None, temperature=0.3, max_tokens=200): + """ + Answer user query using provided text as reference with OpenAI's GPT + """ + # Initialize Variables + openai.api_key = api_key or os.getenv("OPENAI_API_KEY") + + # Setup Prompt based on Summary Type + prompt = f""" +You are a friendly, helpful personal assistant. +Using the users notes below, answer their following question. If the answer is not contained within the notes, say "I don't know." + +Notes: +{text} + +Question: {user_query} + +Answer (in second person):""" + # Get Response from GPT + response = openai.Completion.create( + prompt=prompt, model=model, temperature=temperature, max_tokens=max_tokens, stop='"""' + ) + + # Extract, Clean Message from GPT's Response + story = response["choices"][0]["text"] + return str(story).replace("\n\n", "") + + def summarize(text, summary_type, model, user_query=None, api_key=None, temperature=0.5, max_tokens=200): """ Summarize user input using OpenAI's GPT diff --git a/src/khoj/routers/api_beta.py b/src/khoj/routers/api_beta.py index 2f523917..e03d09e9 100644 --- a/src/khoj/routers/api_beta.py +++ b/src/khoj/routers/api_beta.py @@ -10,6 +10,7 @@ from fastapi import APIRouter # Internal Packages from khoj.routers.api import search from khoj.processor.conversation.gpt import ( + answer, converse, extract_search_type, message_to_log, @@ -48,8 +49,8 @@ def search_beta(q: str, n: Optional[int] = 1): return {"status": "ok", "result": search_results, "type": search_type} -@api_beta.get("/summarize") -def summarize_beta(q: str): +@api_beta.get("/answer") +def answer_beta(q: str): # Initialize Variables model = state.processor_config.conversation.model api_key = state.processor_config.conversation.openai_api_key @@ -61,9 +62,9 @@ def summarize_beta(q: str): # Converse with OpenAI GPT result_list = search(q, n=1, r=True) collated_result = "\n".join([item.entry for item in result_list]) - logger.debug(f"Semantically Similar Notes:\n{collated_result}") + logger.debug(f"Reference Notes:\n{collated_result}") try: - gpt_response = summarize(collated_result, summary_type="notes", user_query=q, model=model, api_key=api_key) + gpt_response = answer(collated_result, user_query=q, model=model, api_key=api_key) status = "ok" except Exception as e: gpt_response = str(e)