from flask import Flask, request, jsonify import os from hiou import hugging import json import io import random import string def get_answer(image: io.BytesIO, question: str): filename = image.name spid = os.getenv('SPID') hug = hugging(spid) filelink = hug.upload(image) image.seek(0, 2) file_size = image.tell() image.seek(0) data = [ { "meta": { "_type": "gradio.FileData" }, "mime_type": "image/jpeg", "orig_name": filename, "path": filelink.split("=", 1)[1], "size": file_size, "url": filelink } ] datas = os.getenv('DATA') jsnd = json.loads(datas) data.append(jsnd) data.append( question ) data.append( { "tab_index": 0 } ) hug.filnal_setup(data, 2, 15) hug.start() return hug.output.get("data")[0] def valuate_qna(p: str, r: str) -> str: spid2 = os.getenv('SPID2') hug = hugging(spid2) data = [ p, r ] hug.filnal_setup(data, 0, 12) hug.start() return hug.output.get("data", [None])[0] def ocr(image: io.BytesIO) -> str: spid3 = os.getenv('SPID3') hug = hugging(spid3) filelink = hug.upload(image) image.seek(0, 2) file_size = image.tell() image.seek(0) data = [ { "meta": { "_type": "gradio.FileData" }, "mime_type": "image/jpeg", "orig_name": "new.jpg", "path": filelink.split("=", 1)[1], "size": file_size, "url": filelink }, os.getenv('AZKEY'), os.getenv('AZURL') ] hug.filnal_setup(data, 0, 13) hug.start() return hug.output.get("data")[0] app = Flask(__name__) @app.route('/getans', methods=['POST']) def gettans_task(): if 'file' not in request.files: if len(request.data) > 0: pass else: return jsonify({"status" : False, "msg" : "No file found"}), 400 if 'file' in request.files: file = request.files['file'] if file.filename == '': return jsonify({"error": "No selected file"}), 400 file_content = io.BytesIO(file.read()) file_content.name = file.filename else: rawFile = request.data file = io.BytesIO(rawFile) if not request.args.get("name"): filename = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(10)) + ".png" file.name = request.args.get("name", filename) headers = dict(request.headers) if not headers.get("KEY") != os.getenv("KEY"): return jsonify({"status" : False, "msg" : "Invalid API Key"}), 404 print(f"QUESTION ASKED : {headers.get('QU', '')}") answer = get_answer(file_content, headers.get('QU', '')) return jsonify({"status" : True, "ANS" : answer}) @app.route('/ocr', methods=['POST']) def task_ocr(): if 'file' not in request.files: if len(request.data) > 0: pass else: return jsonify({"status" : False, "msg" : "No file found", "len" : len(request.data), "form" : dict(request.form)}), 400 if 'file' in request.files: file = request.files['file'] if file.filename == '': return jsonify({"error": "No selected file"}), 400 file_content = io.BytesIO(file.read()) file_content.name = file.filename else: rawFile = request.data file = io.BytesIO(rawFile) if not request.args.get("name"): filename = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(10)) + ".png" file.name = request.args.get("name", filename) headers = dict(request.headers) if not headers.get("KEY") != os.getenv("KEY"): return jsonify({"status" : False, "msg" : "Invalid API Key"}), 404 answer = ocr(file_content) return jsonify({"status" : True, "DATA" : answer}) @app.route('/check', methods=['POST', 'GET']) def check_f(): jsndata = request.json p = jsndata.get("p") r = jsndata.get("r") headers = dict(request.headers) if not headers.get("KEY") != os.getenv("KEY"): return jsonify({"status" : False, "msg" : "Invalid API Key"}), 404 data = valuate_qna(p, r) return jsonify( { "status" : True, "data" : data } ) @app.route('/') def home(): return jsonify({"message": "Welcome to my Flask API!"})