SabariKameswaran commited on
Commit
afe9df4
1 Parent(s): 5aa5e6b

Upload 3 files

Browse files
Files changed (3) hide show
  1. app.ipynb +132 -0
  2. app.py +62 -0
  3. persist/chroma.sqlite3 +0 -0
app.ipynb ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 2,
6
+ "metadata": {},
7
+ "outputs": [],
8
+ "source": [
9
+ "from flask import Flask, jsonify, request, send_file\n",
10
+ "from gtts import gTTS\n",
11
+ "from langchain.chains import ConversationalRetrievalChain\n",
12
+ "from langchain.chat_models import ChatOpenAI\n",
13
+ "from langchain.document_loaders import TextLoader\n",
14
+ "from langchain.embeddings import OpenAIEmbeddings\n",
15
+ "from langchain.indexes import VectorstoreIndexCreator\n",
16
+ "from langchain.indexes.vectorstore import VectorStoreIndexWrapper\n",
17
+ "from langchain.vectorstores import Chroma\n",
18
+ "from langchain.memory import ConversationBufferMemory\n",
19
+ "import os"
20
+ ]
21
+ },
22
+ {
23
+ "cell_type": "code",
24
+ "execution_count": 3,
25
+ "metadata": {},
26
+ "outputs": [],
27
+ "source": [
28
+ "os.environ[\"OPENAI_API_KEY\"] = \"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\"\n",
29
+ "PERSIST = False"
30
+ ]
31
+ },
32
+ {
33
+ "cell_type": "code",
34
+ "execution_count": 5,
35
+ "metadata": {},
36
+ "outputs": [],
37
+ "source": [
38
+ "app = Flask(__name__)"
39
+ ]
40
+ },
41
+ {
42
+ "cell_type": "code",
43
+ "execution_count": 6,
44
+ "metadata": {},
45
+ "outputs": [],
46
+ "source": [
47
+ "query = None\n",
48
+ "\n",
49
+ "\n",
50
+ "def main_func(message , history):\n",
51
+ " chat_history = []\n",
52
+ " if PERSIST and os.path.exists(\"persist\"):\n",
53
+ " print(\"Reusing index...\\n\")\n",
54
+ " vectorstore = Chroma(persist_directory=\"persist\", embedding_function=OpenAIEmbeddings())\n",
55
+ " index = VectorStoreIndexWrapper(vectorstore=vectorstore)\n",
56
+ " else:\n",
57
+ " loader = TextLoader(\"data11.txt\")\n",
58
+ " if PERSIST:\n",
59
+ " index = VectorstoreIndexCreator(vectorstore_kwargs={\"persist_directory\":\"persist\"}).from_loaders([loader])\n",
60
+ " else:\n",
61
+ " index = VectorstoreIndexCreator().from_loaders([loader])\n",
62
+ " print(index)\n",
63
+ "\n",
64
+ " memory = ConversationBufferMemory(memory_key=\"chat_history\", return_messages=True)\n",
65
+ " chain = ConversationalRetrievalChain.from_llm(llm=ChatOpenAI(), retriever=index.vectorstore.as_retriever(), memory=memory, verbose=True)\n"
66
+ ]
67
+ },
68
+ {
69
+ "cell_type": "code",
70
+ "execution_count": 8,
71
+ "metadata": {},
72
+ "outputs": [
73
+ {
74
+ "ename": "AssertionError",
75
+ "evalue": "View function mapping is overwriting an existing endpoint function: generate_text",
76
+ "output_type": "error",
77
+ "traceback": [
78
+ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
79
+ "\u001b[1;31mAssertionError\u001b[0m Traceback (most recent call last)",
80
+ "Cell \u001b[1;32mIn[8], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;129;43m@app\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mroute\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m/generate-text/<query>\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmethods\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mPOST\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 2\u001b[0m \u001b[38;5;28;43;01mdef\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;21;43mgenerate_text\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mquery\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[0;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[43mresult\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mchain\u001b[49m\u001b[43m(\u001b[49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mquestion\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mquery\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mchat_history\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43m]\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 4\u001b[0m \u001b[43m \u001b[49m\u001b[43mgenerated_text\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mresult\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43manswer\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\n",
81
+ "File \u001b[1;32mc:\\Users\\SABARI HARI\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\flask\\sansio\\scaffold.py:366\u001b[0m, in \u001b[0;36mScaffold.route.<locals>.decorator\u001b[1;34m(f)\u001b[0m\n\u001b[0;32m 364\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdecorator\u001b[39m(f: T_route) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m T_route:\n\u001b[0;32m 365\u001b[0m endpoint \u001b[38;5;241m=\u001b[39m options\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mendpoint\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[1;32m--> 366\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43madd_url_rule\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrule\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mendpoint\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 367\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m f\n",
82
+ "File \u001b[1;32mc:\\Users\\SABARI HARI\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\flask\\sansio\\scaffold.py:46\u001b[0m, in \u001b[0;36msetupmethod.<locals>.wrapper_func\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 44\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper_func\u001b[39m(\u001b[38;5;28mself\u001b[39m: Scaffold, \u001b[38;5;241m*\u001b[39margs: t\u001b[38;5;241m.\u001b[39mAny, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: t\u001b[38;5;241m.\u001b[39mAny) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m t\u001b[38;5;241m.\u001b[39mAny:\n\u001b[0;32m 45\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_setup_finished(f_name)\n\u001b[1;32m---> 46\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
83
+ "File \u001b[1;32mc:\\Users\\SABARI HARI\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\flask\\sansio\\app.py:661\u001b[0m, in \u001b[0;36mApp.add_url_rule\u001b[1;34m(self, rule, endpoint, view_func, provide_automatic_options, **options)\u001b[0m\n\u001b[0;32m 659\u001b[0m old_func \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mview_functions\u001b[38;5;241m.\u001b[39mget(endpoint)\n\u001b[0;32m 660\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m old_func \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m old_func \u001b[38;5;241m!=\u001b[39m view_func:\n\u001b[1;32m--> 661\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAssertionError\u001b[39;00m(\n\u001b[0;32m 662\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mView function mapping is overwriting an existing\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 663\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m endpoint function: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mendpoint\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 664\u001b[0m )\n\u001b[0;32m 665\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mview_functions[endpoint] \u001b[38;5;241m=\u001b[39m view_func\n",
84
+ "\u001b[1;31mAssertionError\u001b[0m: View function mapping is overwriting an existing endpoint function: generate_text"
85
+ ]
86
+ }
87
+ ],
88
+ "source": [
89
+ "@app.route('/generate-text/<query>', methods=['POST'])\n",
90
+ "def generate_text(query):\n",
91
+ " result = chain({\"question\": query, \"chat_history\": []})\n",
92
+ " generated_text = result['answer']\n",
93
+ "\n",
94
+ " tts = gTTS(text=generated_text, lang='en')\n",
95
+ " tts.save(\"output.mp3\")\n",
96
+ "\n",
97
+ " return jsonify({\n",
98
+ " 'generated_text': generated_text,\n",
99
+ " 'audio_url': request.host_url + 'audio'\n",
100
+ " })\n",
101
+ "\n",
102
+ "@app.route('/audio')\n",
103
+ "def get_audio():\n",
104
+ " return send_file(\"output.mp3\", as_attachment=True)\n",
105
+ "\n",
106
+ "if __name__ == \"__main__\":\n",
107
+ " app.run(debug=True)\n"
108
+ ]
109
+ }
110
+ ],
111
+ "metadata": {
112
+ "kernelspec": {
113
+ "display_name": "Python 3",
114
+ "language": "python",
115
+ "name": "python3"
116
+ },
117
+ "language_info": {
118
+ "codemirror_mode": {
119
+ "name": "ipython",
120
+ "version": 3
121
+ },
122
+ "file_extension": ".py",
123
+ "mimetype": "text/x-python",
124
+ "name": "python",
125
+ "nbconvert_exporter": "python",
126
+ "pygments_lexer": "ipython3",
127
+ "version": "3.11.4"
128
+ }
129
+ },
130
+ "nbformat": 4,
131
+ "nbformat_minor": 2
132
+ }
app.py ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, jsonify, request, send_file
2
+ from gtts import gTTS
3
+ from langchain.chains import ConversationalRetrievalChain
4
+ from langchain.chat_models import ChatOpenAI
5
+ from langchain.document_loaders import TextLoader
6
+ from langchain.embeddings import OpenAIEmbeddings
7
+ from langchain.indexes import VectorstoreIndexCreator
8
+ from langchain.indexes.vectorstore import VectorStoreIndexWrapper
9
+ from langchain.vectorstores import Chroma
10
+ from langchain.memory import ConversationBufferMemory
11
+ import os
12
+
13
+ app = Flask(__name__)
14
+ os.environ["OPENAI_API_KEY"] = "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"
15
+ PERSIST = True
16
+
17
+ query = None
18
+
19
+ def main_func(message, history):
20
+ global query
21
+ chat_history = history
22
+ if PERSIST and os.path.exists("persist"):
23
+ print("Reusing index...\n")
24
+ vectorstore = Chroma(persist_directory="persist", embedding_function=OpenAIEmbeddings())
25
+ index = VectorStoreIndexWrapper(vectorstore=vectorstore)
26
+ else:
27
+ loader = TextLoader("new.txt")
28
+ if PERSIST:
29
+ index = VectorstoreIndexCreator(vectorstore_kwargs={"persist_directory": "persist"}).from_loaders([loader])
30
+ else:
31
+ index = VectorstoreIndexCreator().from_loaders([loader])
32
+
33
+ print(index)
34
+
35
+ memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
36
+ chain = ConversationalRetrievalChain.from_llm(llm=ChatOpenAI(), retriever=index.vectorstore.as_retriever(), memory=memory, verbose=True)
37
+
38
+ query = message
39
+ result = chain({"question": query, "chat_history": chat_history})
40
+ print(result['answer'])
41
+ chat_history.append((query, result['answer']))
42
+ return result['answer']
43
+
44
+ @app.route('/generate-text/<input_text>', methods=['POST'])
45
+ def generate_text(input_text):
46
+ global query
47
+ generated_text = main_func(input_text, [])
48
+
49
+ tts = gTTS(text=generated_text, lang='en')
50
+ tts.save("output.mp3")
51
+
52
+ return jsonify({
53
+ 'generated_text': generated_text,
54
+ 'audio_url': request.host_url + 'audio'
55
+ })
56
+
57
+ @app.route('/audio')
58
+ def get_audio():
59
+ return send_file("output.mp3", as_attachment=True)
60
+
61
+ if __name__ == "__main__":
62
+ app.run(debug=True)
persist/chroma.sqlite3 ADDED
Binary file (147 kB). View file