Spaces:
Runtime error
Runtime error
| import json | |
| import os | |
| import logging | |
| import shutil | |
| from fastapi import FastAPI, File, Query,Form, Request, HTTPException, UploadFile | |
| from fastapi.responses import JSONResponse, RedirectResponse | |
| from fastapi.staticfiles import StaticFiles | |
| from fastapi.templating import Jinja2Templates | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from dotenv import load_dotenv | |
| import mysql.connector | |
| from typing import List | |
| # Load environment variables | |
| load_dotenv() | |
| # Configure logging | |
| logging.basicConfig( | |
| level=logging.INFO, | |
| format='%(asctime)s - %(levelname)s - %(message)s', | |
| handlers=[ | |
| logging.FileHandler("redmindgen.log"), | |
| logging.StreamHandler() # This ensures logging to console | |
| ] | |
| ) | |
| logging.info("Application startup") | |
| # Create the FastAPI app | |
| app = FastAPI(title="RedmindGen", description="Chat with your Data", version="1.0.0") | |
| # Mount static files | |
| app.mount("/static", StaticFiles(directory="static"), name="static") | |
| # Jinja2 templates | |
| templates = Jinja2Templates(directory="templates") | |
| # Configure CORS | |
| origins = [ | |
| "http://localhost:8000", | |
| "http://127.0.0.1:8000", | |
| "http://167.71.75.10:8003/" | |
| ] | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=origins, | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| async def read_root(request: Request): | |
| return templates.TemplateResponse("index.html", {"request": request}) | |
| def verify_user(username: str, password: str): | |
| try: | |
| # Connect to MySQL database | |
| cnx = mysql.connector.connect(user='u852023448_redmindgpt', password='redmindGpt@123', | |
| host='217.21.88.10', | |
| database='u852023448_redmindgpt') | |
| #cnx = mysql.connector.connect(user='root', password='', host='localhost', database='redmind_gpt') | |
| cursor = cnx.cursor() | |
| query = "SELECT * FROM user_detail WHERE username = %s AND password = %s" | |
| values = (username, password) | |
| cursor.execute(query, values) | |
| result = cursor.fetchone() | |
| cursor.close() | |
| cnx.close() | |
| if result is not None: | |
| logging.info(f"User {username} logged in successfully") | |
| return "success" | |
| else: | |
| logging.info(f"User {username} login failed") | |
| return "failure" | |
| except mysql.connector.Error as err: | |
| logging.error(f"Database error: {err}") | |
| return "failure" | |
| async def validate_user(request: Request, username: str = Form(...), password: str = Form(...)): | |
| status = verify_user(username, password) | |
| if status == 'success': | |
| return templates.TemplateResponse("dashboard.html", {"request": request, "username": username}) | |
| else: | |
| return templates.TemplateResponse("index.html", {"request": request}) | |
| async def submit_company_profile(request: Request, | |
| company_name: str = Form(...), | |
| company_code: str = Form(...), | |
| domain: str = Form(...), | |
| llm_tools: List[str] = Form(...)): | |
| logging.info("Received form submission for company profile") | |
| logging.info(f"Form data - company_name: {company_name}, company_code: {company_code}, domain: {domain}, llm_tools: {llm_tools}") | |
| try: | |
| # Connect to MySQL database | |
| cnx = mysql.connector.connect(user='u852023448_redmindgpt', password='redmindGpt@123', | |
| host='217.21.88.10', | |
| database='u852023448_redmindgpt') | |
| #cnx = mysql.connector.connect(user='root', password='', host='localhost', database='redmind_gpt') | |
| cursor = cnx.cursor() | |
| query = "INSERT INTO company_detail (company_name, company_code, domain, llm_tools) VALUES (%s, %s, %s, %s)" | |
| values = (company_name, company_code, domain, ",".join(llm_tools)) | |
| logging.info(f"Executing query: {query} with values: {values}") | |
| cursor.execute(query, values) | |
| cnx.commit() | |
| logging.info(f"Query executed successfully, {cursor.rowcount} row(s) affected") | |
| cursor.close() | |
| cnx.close() | |
| logging.info(f"Company profile for {company_name} inserted successfully") | |
| RedirectResponse(url="/company_profile?message=Data saved successfully", status_code=302) | |
| except mysql.connector.Error as err: | |
| logging.error(f"Database error: {err}") | |
| raise HTTPException(status_code=500, detail="Internal Server Error") | |
| async def get_companies(): | |
| try: | |
| cnx = mysql.connector.connect(user='root', password='', host='localhost', database='redmind_gpt') | |
| cursor = cnx.cursor() | |
| query = "SELECT company_name FROM company_detail " | |
| cursor.execute(query) | |
| companies = cursor.fetchall() | |
| cursor.close() | |
| cnx.close() | |
| return {"companies": [{"name": company[0]} for company in companies]} | |
| except mysql.connector.Error as err: | |
| logging.error(f"Database error: {err}") | |
| raise HTTPException(status_code=500, detail="Internal Server Error") | |
| async def company_profile(request: Request): | |
| return templates.TemplateResponse("company_profile.html", {"request": request}) | |
| async def get_company_id(company_name: str): | |
| print(f"Received company_name: {company_name}") # Debug statement | |
| logging.info(f"Received request for company name: {company_name}") | |
| try: | |
| cnx = mysql.connector.connect(user='root', password='', host='localhost', database='redmind_gpt') | |
| cursor = cnx.cursor() | |
| query = "SELECT company_id FROM company_detail WHERE company_name = %s" | |
| cursor.execute(query, (company_name,)) | |
| result = cursor.fetchone() | |
| cursor.close() | |
| cnx.close() | |
| if result: | |
| return {"company_id": result[0]} | |
| else: | |
| logging.error(f"Company not found for name: {company_name}") | |
| raise HTTPException(status_code=404, detail="Company not found") | |
| except mysql.connector.Error as err: | |
| logging.error(f"Database error: {err}") | |
| raise HTTPException(status_code=500, detail="Internal Server Error") | |
| async def knowledgebase(request: Request): | |
| return templates.TemplateResponse("knowledgebase.html", {"request": request}) | |
| async def upload_document( | |
| request: Request, | |
| company_id:str=Form(...), | |
| uploadFile: UploadFile = File(...), | |
| documentName: str = Form(...), | |
| documentDescription: str = Form(...), | |
| department: str = Form(...), | |
| version: str = Form(...), | |
| lastUpdated: str = Form(...) | |
| ): | |
| try: | |
| # Save the uploaded file | |
| upload_folder = "uploads/" | |
| os.makedirs(upload_folder, exist_ok=True) | |
| file_path = os.path.join(upload_folder, uploadFile.filename) | |
| with open(file_path, "wb") as buffer: | |
| shutil.copyfileobj(uploadFile.file, buffer) | |
| # Save the details to the database | |
| cnx = mysql.connector.connect(user='root', password='', host='localhost', database='redmind_gpt') | |
| cursor = cnx.cursor() | |
| query = """ | |
| INSERT INTO knowledge_base (company_id,file_path, document_name, document_desc, department, version, last_updated) | |
| VALUES (%s,%s, %s, %s, %s, %s, %s) | |
| """ | |
| values = (company_id,file_path, documentName, documentDescription, department, version, lastUpdated) | |
| cursor.execute(query, values) | |
| cnx.commit() | |
| cursor.close() | |
| cnx.close() | |
| logging.info(f"Document {documentName} uploaded successfully") | |
| return RedirectResponse(url="/", status_code=302) | |
| except mysql.connector.Error as err: | |
| logging.error(f"Database error: {err}") | |
| raise HTTPException(status_code=500, detail="Internal Server Error") | |
| async def get_document(company_id: str = Query(...), company_name: str = Query(...)): | |
| print(f"Received companyId and name: {company_id},{company_name}") # Log rec | |
| #async def get_data_connectors(company_id: str, company_name: str): | |
| logging.info(f"Received request for company_id and company_id: {company_id},{company_name}") | |
| try: | |
| cnx = mysql.connector.connect(user='root', password='', host='localhost', database='redmind_gpt') | |
| cursor = cnx.cursor() | |
| query = """ | |
| SELECT kb.company_id, kb.file_path, kb.document_name, kb.document_desc,kb.department,kb.version,kb.last_updated | |
| FROM redmind_gpt.knowledge_base kb | |
| JOIN redmind_gpt.company_detail cd ON kb.company_id = cd.company_id | |
| WHERE kb.company_id = %s and cd.company_name=%s | |
| """ | |
| logging.info(f"Executing query: {query} with company_id: {company_id}") | |
| params = (company_id,company_name) | |
| logging.info(f"Query parameters: {params}") | |
| print(f"Query parameters: {params}") | |
| cursor.execute(query, params) # Pa | |
| result = cursor.fetchone() | |
| logging.info(f"Query result: {result}") | |
| cursor.close | |
| cnx.close() | |
| if result: | |
| logging.info(f"Document found for company_id: {company_id}") | |
| return { | |
| "company_id": result[0], | |
| # "file_path":result[1], | |
| "document_name": result[2], | |
| "document_desc": result[3], | |
| "department": result[4], | |
| "version": result[5], | |
| "last_updated": result[6] | |
| } | |
| else: | |
| logging.warning(f"No document found for company_id: {company_id}") | |
| raise HTTPException(status_code=404, detail="Data document not found") | |
| except mysql.connector.Error as err: | |
| logging.error(f"Database error: {err}") | |
| raise HTTPException(status_code=500, detail="Internal Server Error") | |
| async def data_connectors(request: Request): | |
| return templates.TemplateResponse("data_connectors.html", {"request": request}) | |
| async def save_data_connectors( request: Request, | |
| company_id: int = Form(...), | |
| database: List[str] = Form(...), | |
| server: str = Form(...), | |
| port: str = Form(...), | |
| databaseName: List[str] = Form(...), | |
| username: str=Form(...), | |
| password: str=Form(...), | |
| tables: List[str] = Form(...)): | |
| logging.info(f"Received form submission for database_connectors") | |
| try: | |
| cnx = mysql.connector.connect(user='root', password='', host='localhost', database='redmind_gpt') | |
| cursor = cnx.cursor() | |
| #databasetype_json=json.dumps(database) | |
| query = "INSERT INTO data_connectors(company_id,databasetype, serverip, port, database_name,username,password,dbtablename) VALUES (%s,%s, %s, %s, %s,%s,%s,%s)" | |
| values = (company_id, ",".join(database), server, port, ",".join(databaseName),username,password, ",".join(tables)) | |
| logging.info(f"Executing query: {query} with values: {values}") | |
| cursor.execute(query, values) | |
| cnx.commit() | |
| logging.info(f"Query executed successfully, {cursor.rowcount} row(s) affected") | |
| cursor.close() | |
| cnx.close() | |
| logging.info(f"Data_connectors for {database} inserted successfully") | |
| return RedirectResponse(url="/data_connectors", status_code=302) | |
| except mysql.connector.Error as err: | |
| logging.error(f"Database error: {err}") | |
| raise HTTPException(status_code=500, detail="Internal Server Error") | |
| async def get_data_connectors(company_id: str = Query(...), company_name: str = Query(...)): | |
| print(f"Received companyId and name: {company_id},{company_name}") # Log rec | |
| #async def get_data_connectors(company_id: str, company_name: str): | |
| logging.info(f"Received request for company_id and company_id: {company_id},{company_name}") | |
| try: | |
| cnx = mysql.connector.connect(user='root', password='', host='localhost', database='redmind_gpt') | |
| cursor = cnx.cursor() | |
| query = """ | |
| SELECT dc.company_id, dc.databasetype, dc.serverip, dc.port,dc.database_name, dc.username, dc.password ,dc.dbtablename | |
| FROM redmind_gpt.data_connectors dc | |
| JOIN redmind_gpt.company_detail cd ON dc.company_id = cd.company_id | |
| WHERE dc.company_id = %s and cd.company_name=%s | |
| """ | |
| logging.info(f"Executing query: {query} with company_id: {company_id}") | |
| params = (company_id,company_name) | |
| logging.info(f"Query parameters: {params}") | |
| print(f"Query parameters: {params}") | |
| cursor.execute(query, params) # Pa | |
| result = cursor.fetchone() | |
| logging.info(f"Query result: {result}") | |
| cursor.close() | |
| cnx.close() | |
| if result: | |
| logging.info(f"Data found for company_id: {company_id}") | |
| return { | |
| "company_id": result[0], | |
| "databasetype":result[1], | |
| "serverip": result[2], | |
| "port": result[3], | |
| "database_name": result[4], | |
| "username": result[5], | |
| "password": result[6], | |
| "dbtablename": result[7] | |
| } | |
| else: | |
| logging.warning(f"No data found for company_id: {company_id}") | |
| raise HTTPException(status_code=404, detail="Data connector not found") | |
| except mysql.connector.Error as err: | |
| logging.error(f"Database error: {err}") | |
| raise HTTPException(status_code=500, detail="Internal Server Error") | |
| async def API_connectors(request: Request): | |
| return templates.TemplateResponse("API_connectors.html", {"request": request}) | |
| async def prompt_template(request: Request): | |
| return templates.TemplateResponse("prompt_template.html", {"request": request}) | |
| async def chatbot(request: Request): | |
| return templates.TemplateResponse("chatbot.html", {"request": request}) | |