71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
from flask import Flask, jsonify, request
|
|
from utils import split_text_into_paragraphs, generate_prompts, generate_image_from_prompt, save_to_history, load_history
|
|
import os
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
app = Flask(__name__)
|
|
|
|
@app.route('/health', methods=['GET'])
|
|
def health_check():
|
|
return jsonify({"status": "healthy", "service": "novel-to-manga-backend"})
|
|
|
|
@app.route('/process_text', methods=['POST'])
|
|
def process_text():
|
|
data = request.json
|
|
text = data.get('text')
|
|
api_key = data.get('api_key') or os.getenv("OPENAI_API_KEY")
|
|
base_url = data.get('base_url')
|
|
model = data.get('model') or "gpt-4o"
|
|
|
|
if not text:
|
|
return jsonify({"error": "No text provided"}), 400
|
|
|
|
try:
|
|
paragraphs = split_text_into_paragraphs(text)
|
|
prompts = generate_prompts(paragraphs, api_key, base_url, model)
|
|
return jsonify({"prompts": prompts})
|
|
except Exception as e:
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
@app.route('/generate_image', methods=['POST'])
|
|
def generate_image():
|
|
data = request.json
|
|
prompt = data.get('prompt')
|
|
# Try Image Gen specific key first, then fallback to general OpenAI key
|
|
api_key = data.get('api_key') or os.getenv("IMAGE_GEN_API_KEY") or os.getenv("OPENAI_API_KEY")
|
|
base_url = data.get('base_url')
|
|
model = data.get('model') or "dall-e-3"
|
|
|
|
if not prompt:
|
|
return jsonify({"error": "No prompt provided"}), 400
|
|
|
|
try:
|
|
image_url = generate_image_from_prompt(prompt, api_key, base_url, model)
|
|
if image_url:
|
|
# Save to history
|
|
save_to_history({
|
|
"prompt": prompt,
|
|
"image_url": image_url,
|
|
"novel_text": data.get('novel_text', '') # Optional
|
|
})
|
|
return jsonify({"image_url": image_url})
|
|
else:
|
|
return jsonify({"error": "Failed to generate image"}), 500
|
|
except Exception as e:
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
@app.route('/history', methods=['GET'])
|
|
def get_history():
|
|
try:
|
|
history = load_history()
|
|
# Sort by timestamp desc
|
|
history.sort(key=lambda x: x.get('timestamp', 0), reverse=True)
|
|
return jsonify({"history": history})
|
|
except Exception as e:
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
if __name__ == '__main__':
|
|
app.run(debug=True, port=5001)
|