import os import configparser import requests from flask import Flask, render_template_string, jsonify app = Flask(__name__) OLLAMA_HOST = os.environ.get("OLLAMA_HOST", "http://harbor.freshbrewed.science:11444") OLLAMA_MODEL = os.environ.get("OLLAMA_MODEL", "gemma4:e4b") PROMPT = os.environ.get("PROMPT", "tell me a dad joke about programming") PORT = int(os.environ.get("PORT", "80")) def get_app_version(): config = configparser.ConfigParser() version_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "version.ini") if os.path.exists(version_file): try: config.read(version_file) return config.get("metadata", "version", fallback="unknown") except Exception: return "unknown" return "unknown" HTML_TEMPLATE = """ Programming Dad Jokes
Ollama • Gemma 4 • v{{ version }}

Programming Dad Joke

Freshly compiled humor from our AI model

{{ joke }}
Host: {{ host }} Model: {{ model }} Prompt: "{{ prompt }}" App Version: v{{ version }}
""" def request_joke(): url = f"{OLLAMA_HOST.rstrip('/')}/api/generate" payload = { "model": OLLAMA_MODEL, "prompt": PROMPT, "stream": False } try: resp = requests.post(url, json=payload, timeout=60) resp.raise_for_status() data = resp.json() return data.get("response", "No response received from Ollama.") except Exception as e: return f"Error contacting Ollama ({OLLAMA_HOST}): {e}" @app.route("/") def index(): joke = request_joke() version = get_app_version() return render_template_string( HTML_TEMPLATE, joke=joke, host=OLLAMA_HOST, model=OLLAMA_MODEL, prompt=PROMPT, version=version ) @app.route("/api/joke") def api_joke(): joke = request_joke() version = get_app_version() return jsonify({ "joke": joke, "version": version }) if __name__ == "__main__": version = get_app_version() print(f"Starting server v{version} on port {PORT} with model '{OLLAMA_MODEL}' at {OLLAMA_HOST}...") app.run(host="0.0.0.0", port=PORT)