from flask import Blueprint, Response, jsonify, request from controllers.gdrive_controller import GDriveController from controllers.glb_controller import GlbController from controllers.render_controller import RenderController from controllers.suggest_controller import SuggestController gdrive_bp = Blueprint('gdrive', __name__) glb_bp = Blueprint('glb', __name__) render_bp = Blueprint('render', __name__) suggest_bp = Blueprint('suggest', __name__) gdrive_controller = GDriveController() glb_controller = GlbController() render_controller = RenderController() suggest_controller = SuggestController() def setup_routes(app): @app.route('/glb', methods=['GET']) # Image to model def get_glb() -> Response: hf_token = request.args.get('hf_token', '', type=str) base_image_url = request.args.get('base_image_url', type=str) ss_guidance_strength = request.args.get('ss_guidance_strength', 7.5, type=float) ss_sampling_steps = request.args.get('ss_sampling_steps', 12, type=int) slat_guidance_strength = request.args.get('slat_guidance_strength', 3, type=float) slat_sampling_steps = request.args.get('slat_sampling_steps', 12, type=int) multiimage_algo = request.args.get('multiimage_algo', 'stochastic', type=str) mesh_simplify = request.args.get('mesh_simplify', 0.95, type=bool) texture_size = request.args.get('texture_size', 1024, type=int) return glb_controller.get_glb(hf_token, base_image_url, ss_guidance_strength, ss_sampling_steps, slat_guidance_strength, slat_sampling_steps, multiimage_algo, mesh_simplify, texture_size) # Suggest @app.route('/suggest', methods=['GET']) def get_suggest() -> Response: hf_token = request.args.get('hf_token', '', type=str) message = request.args.get('message', 'Hello!!', type=str) system_prompt = request.args.get('system_prompt', 'You are a helpful assistant. First recognize the user request and then reply carefully with thinking.', type=str) temperature = request.args.get('temperature', 0.7, type=float) max_new_tokens = request.args.get('max_new_tokens', 12000, type=int) top_k_sampling = request.args.get('top_k_sampling', 50, type=int) repetition_penalty = request.args.get('repetition_penalty', 1.1, type=float) top_p_sampling = request.args.get('top_p_sampling', 0.95, type=float) return suggest_controller.get_suggest(hf_token, message, system_prompt, temperature, max_new_tokens, top_k_sampling, repetition_penalty, top_p_sampling) # Upload to Google Drive @app.route('/upload', methods=['POST']) def post_gdrive() -> Response: local_file_path = request.form.get('local_file_path', '', type=str) folder_id = request.form.get('folder_id', '', type=str) return gdrive_controller.post_gdrive(local_file_path, folder_id) # Text + Sketch to image @app.route('/render', methods=['POST']) def post_render() -> Response: # Vérifier si un fichier est envoyé if 'image' not in request.files: return jsonify({"error": "Aucune image envoyée"}), 400 hf_token = request.form.get('hf_token', '', type=str) base_image = request.files.get('image') prompt = request.form.get('prompt', 'A realistic photo of a building', type=str) negative_prompt = request.form.get('negative_prompt', 'sketch, drawing', type=str) instruct_query = request.form.get('instruct_query', 'use everything from the image', type=str) scale = request.form.get('scale', 0.8, type=float) nfaa_negative_prompt = request.form.get('nfaa_negative_prompt', 'naked, bikini, skimpy, scanty, bare skin, lingerie, swimsuit, exposed, see-through', type=str) return render_controller.post_render(hf_token, base_image, prompt, negative_prompt, instruct_query, scale, nfaa_negative_prompt)