Summarize chat logs and notes returned by semantic search via /chat API

This commit is contained in:
Debanjum Singh Solanky 2021-11-28 13:13:39 +05:30
parent 5cd920544d
commit 0ac1e5f372
2 changed files with 16 additions and 6 deletions

View file

@ -9,10 +9,10 @@ from fastapi import FastAPI
# Internal Packages # Internal Packages
from src.search_type import asymmetric, symmetric_ledger, image_search from src.search_type import asymmetric, symmetric_ledger, image_search
from src.utils.helpers import get_absolute_path from src.utils.helpers import get_absolute_path, get_from_dict
from src.utils.cli import cli from src.utils.cli import cli
from src.utils.config import SearchType, SearchModels, TextSearchConfig, ImageSearchConfig, SearchConfig, ProcessorConfig, ConversationProcessorConfig from src.utils.config import SearchType, SearchModels, TextSearchConfig, ImageSearchConfig, SearchConfig, ProcessorConfig, ConversationProcessorConfig
from src.processor.conversation.gpt import converse, message_to_log, message_to_prompt, understand from src.processor.conversation.gpt import converse, message_to_log, message_to_prompt, understand, summarize
# Application Global State # Application Global State
@ -95,8 +95,14 @@ def chat(q: str):
meta_log = processor_config.conversation.meta_log meta_log = processor_config.conversation.meta_log
# Converse with OpenAI GPT # Converse with OpenAI GPT
gpt_response = converse(q, chat_log, api_key=processor_config.conversation.openai_api_key)
metadata = understand(q, api_key=processor_config.conversation.openai_api_key) metadata = understand(q, api_key=processor_config.conversation.openai_api_key)
if get_from_dict(metadata, "intent", "memory-type") == "notes":
query = get_from_dict(metadata, "intent", "query")
result_list = search(query, n=1, t=SearchType.Notes)
collated_result = "\n".join([item["Entry"] for item in result_list])
gpt_response = summarize(collated_result, metadata["intent"]["memory-type"], user_query=q, api_key=processor_config.conversation.openai_api_key)
else:
gpt_response = converse(q, chat_log, api_key=processor_config.conversation.openai_api_key)
# Update Conversation History # Update Conversation History
processor_config.conversation.chat_log = message_to_prompt(q, chat_log, gpt_message=gpt_response) processor_config.conversation.chat_log = message_to_prompt(q, chat_log, gpt_message=gpt_response)
@ -169,10 +175,14 @@ def shutdown_event():
elif processor_config.conversation.verbose: elif processor_config.conversation.verbose:
print('INFO:\tSaving conversation logs to disk...') print('INFO:\tSaving conversation logs to disk...')
# Summarize Conversation Logs for this Session
session_summary = summarize(processor_config.conversation.chat_log, "chat", api_key=processor_config.conversation.openai_api_key)
# Save Conversation Metadata Logs to Disk # Save Conversation Metadata Logs to Disk
conversation_logs = {"session": { "summary": session_summary, "meta": processor_config.conversation.meta_log}},
conversation_logfile = get_absolute_path(processor_config.conversation.conversation_logfile) conversation_logfile = get_absolute_path(processor_config.conversation.conversation_logfile)
with open(conversation_logfile, "w+", encoding='utf-8') as logfile: with open(conversation_logfile, "w+", encoding='utf-8') as logfile:
json.dump(processor_config.conversation.meta_log, logfile) json.dump(conversation_logs, logfile)
print('INFO:\tConversation logs saved to disk.') print('INFO:\tConversation logs saved to disk.')

View file

@ -18,7 +18,7 @@ def summarize(text, summary_type, user_query=None, api_key=None, temperature=0.5
if summary_type == "chat": if summary_type == "chat":
prompt = f"You are an AI. Summarize the conversation below from your perspective:\n\n{text}\n\nSummarize the conversation from the AI's first-person perspective:" prompt = f"You are an AI. Summarize the conversation below from your perspective:\n\n{text}\n\nSummarize the conversation from the AI's first-person perspective:"
elif summary_type == "notes": elif summary_type == "notes":
prompt = f"Summarize the below notes about {user_query}:\n\n{text}\n\nSummarize:" prompt = f"Summarize the below notes about {user_query}:\n\n{text}\n\nSummarize the notes in second person perspective and use past tense:"
# Get Response from GPT # Get Response from GPT
response = openai.Completion.create( response = openai.Completion.create(
@ -33,7 +33,7 @@ def summarize(text, summary_type, user_query=None, api_key=None, temperature=0.5
# Extract, Clean Message from GPT's Response # Extract, Clean Message from GPT's Response
story = response['choices'][0]['text'] story = response['choices'][0]['text']
return str(story) return str(story).replace("\n\n", "")
def understand(text, api_key=None, temperature=0.5, max_tokens=100): def understand(text, api_key=None, temperature=0.5, max_tokens=100):