Private
Public Access
1
0
Files
rasmusbendtsendk/app.py
Rasmus c9c9610de9
All checks were successful
Redeploy landing on Push / Explore-Gitea-Actions (push) Successful in 7s
converted llm to non streaming
2025-12-22 17:00:12 +01:00

72 lines
2.2 KiB
Python

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/<path:path>/') # 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/<string:tag_name>/')
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)