From 97ebac8b073b54746eb4e30629a908e8f396be9f Mon Sep 17 00:00:00 2001 From: Fraser Date: Mon, 12 Jun 2023 21:33:11 -0400 Subject: [PATCH] add simplified chat API --- api/chat.py | 21 +++++++++++++++++---- api/main.py | 12 +++++++++++- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/api/chat.py b/api/chat.py index 92887fe..bb82b9c 100644 --- a/api/chat.py +++ b/api/chat.py @@ -165,24 +165,37 @@ def talk_to_robot_internal(index, query: str, history: List[Dict[str, str]], k: print('\n' * 10) - print(" ------------------------------ response: -----------------------------") + print(' ------------------------------ response: -----------------------------') print(response) log(query) log(response) # yield done state, possibly with followup questions - fin_json = {"state": "done"} + fin_json = {'state': 'done'} followups = multisearch_authored([query, response], DEBUG_PRINT) for i, followup in enumerate(followups): - fin_json[f"followup_{i}"] = asdict(followup) + fin_json[f'followup_{i}'] = asdict(followup) yield fin_json except Exception as e: print(e) - yield {"state": "error", "error": str(e)} + yield {'state': 'error', 'error': str(e)} # convert talk_to_robot_internal from dict generator into json generator def talk_to_robot(index, query: str, history: List[Dict[str, str]], k: int = STANDARD_K, log: Callable = print): yield from (json.dumps(block) for block in talk_to_robot_internal(index, query, history, k, log)) +# wayyy simplified api +def talk_to_robot_simple(index, query: str): + res = {'response': ''} + + for block in talk_to_robot_internal(index, query, []): + if block['state'] == 'loading' and block['phase'] == 'semantic' and 'citations' in block: + res['citations'] = block['citations'] + elif block['state'] == 'streaming': + res['response'] += block['content'] + elif block['state'] == 'error': + res['response'] = block['error'] + + return json.dumps(res) diff --git a/api/main.py b/api/main.py index 60ce62d..2b91831 100644 --- a/api/main.py +++ b/api/main.py @@ -1,7 +1,7 @@ from flask import Flask, jsonify, request, Response from flask_cors import CORS, cross_origin from get_blocks import get_top_k_blocks -from chat import talk_to_robot +from chat import talk_to_robot, talk_to_robot_simple import dataclasses import os import openai @@ -83,6 +83,16 @@ def chat(): return Response(stream(talk_to_robot(PINECONE_INDEX, query, history, log = log)), mimetype='text/event-stream') + +# ------------- simplified non-streaming chat for internal testing ------------- + +@app.route('/chat/', methods=['GET']) +@cross_origin() +def chat_simplified(param=''): + return Response(talk_to_robot_simple(PINECONE_INDEX, param)) + + + # ---------------------- human authored content retrieval ---------------------- # act as a proxy, forwarding any requests to /human/ to