1- from flask import Flask , request , jsonify , render_template , Response , stream_with_context
1+ from flask import Flask , request , jsonify , render_template , Response , stream_with_context , session
22from flask_wtf .csrf import CSRFProtect
33from rag_system import rag_system
44import hashlib
55import subprocess
66import os
7+ import segment .analytics as analytics
8+ import uuid
9+
10+ analytics .write_key = os .getenv ('SEGMENT_WRITE_KEY' )
711
812app = Flask (__name__ , static_folder = 'templates/images' )
913app .config ['SECRET_KEY' ] = os .getenv ('SECRET_KEY' )
@@ -33,17 +37,35 @@ def ask():
3337
3438 data = request .get_json ()
3539 query = data .get ('query' )
40+
3641 if not query :
3742 return jsonify ({"error" : "No query provided" }), 400
43+
44+ # For analytics tracking, generates an anonymous id and uses it for the session
45+ if 'anonymous_id' not in session :
46+ session ['anonymous_id' ] = str (uuid .uuid4 ())
47+ anonymous_id = session ['anonymous_id' ]
3848
3949 def generate ():
50+ full_response = ""
4051 try :
4152 for token in rag_system .answer_query_stream (query ):
4253 yield token
54+ full_response += token
4355 except Exception as e :
4456 print (f"Error in /ask endpoint: { e } " )
4557 yield "Internal Server Error"
4658
59+ if not full_response :
60+ full_response = "No response generated"
61+
62+ # Track the query and response
63+ analytics .track (
64+ anonymous_id = anonymous_id ,
65+ event = 'Chatbot Question submitted' ,
66+ properties = {'query' : query , 'response' : full_response , 'source' : 'Ask Defang' }
67+ )
68+
4769 return Response (stream_with_context (generate ()), content_type = 'text/markdown' )
4870
4971@app .route ('/trigger-rebuild' , methods = ['POST' ])
@@ -75,4 +97,4 @@ def trigger_rebuild():
7597 return jsonify ({"error" : "Internal Server Error" }), 500
7698
7799if __name__ == '__main__' :
78- app .run (host = '0.0.0.0' , port = 5000 )
100+ app .run (host = '0.0.0.0' , port = 5000 )
0 commit comments