from flask import Flask, render_template, Response, stream_with_context, request from flask_flatpages import FlatPages from werkzeug.middleware.proxy_fix import ProxyFix import requests app = Flask(__name__) app.wsgi_app = ProxyFix(app.wsgi_app, x_proto=1, x_host=1) app.config.update( FLATPAGES_AUTO_RELOAD = True, FLATPAGES_EXTENSION = '.md', FLATPAGES_MARKDOWN_EXTENSIONS = ['fenced_code', 'tables'] ) pages = FlatPages(app) @app.route('/') def index(): # Sort posts by date metadata posts = sorted(pages, key=lambda p: p.meta.get('date'), reverse=True) return render_template('index.html', posts=posts) @app.route('/about') def about(): return render_template('about.html') @app.route('/proxy-chat', methods=['POST']) def proxy_chat(): target_url = "http://192.168.0.37:5002/v1/chat/completions" try: # 1. Forward the request without stream=True # llama.cpp will now send back one large JSON object response = requests.post( target_url, json=request.json, timeout=120 # Important: Give the i5-8400 time to think ) # 2. Return the full JSON response to the browser return Response( response.content, status=response.status_code, content_type=response.headers['content-type'] ) except requests.exceptions.Timeout: return {"error": "The serve took too long to answer. Try a different prompt."}, 504 except Exception as e: return {"error": str(e)}, 500 @app.route('/post//') # Adding /post/ prefix helps organize URLs def post(path): page = pages.get_or_404(path) return render_template('post.html', page=page) @app.route('/tag//') def tag(tag_name): tagged_pages = [p for p in pages if tag_name in p.meta.get('tags', [])] return render_template('tag.html', pages=tagged_pages, tag_name=tag_name) @app.context_processor def inject_tags(): all_tags = set() for page in pages: t = page.meta.get('tags', []) if isinstance(t, list): all_tags.update(t) return dict(all_cloud_tags=sorted(list(all_tags))) if __name__ == "__main__": app.run(host='0.0.0.0', port=5001, debug=True)