diff --git a/app.py b/app.py index 0485bd7..8ee11c3 100644 --- a/app.py +++ b/app.py @@ -95,6 +95,12 @@ def init_db(): """ ) + # migrations + try: + c.execute("ALTER TABLE jobs ADD COLUMN user_prompt TEXT") + except Exception: + pass + # defaults c.execute("INSERT OR IGNORE INTO projects(name, created_at) VALUES (?,?)", ("Default", now_iso())) c.execute( @@ -342,10 +348,12 @@ def _process_analysis_job(job_id: int): if not doc or not prm: raise RuntimeError("Dokument oder Prompt nicht gefunden") + user_extra = (j.get("user_prompt") or "").strip() llm_prompt = ( "Du bist ein präziser Assistent. Antworte auf Deutsch.\\n" - f"AUFTRAG:\\n{prm['prompt']}\\n\\n" - f"TEXT:\\n{doc['content_md']}\\n" + f"AUFTRAG:\\n{prm['prompt']}\\n" + + (f"\\nZUSATZINFOS:\\n{user_extra}\\n" if user_extra else "") + + f"\\nTEXT:\\n{doc['content_md']}\\n" ) r = requests.post( @@ -389,8 +397,8 @@ def enqueue_job(kind: str, **kwargs) -> int: with db() as c: cur = c.execute( """ - INSERT INTO jobs(kind,status,project_id,document_id,prompt_id,title,file_path,created_at) - VALUES (?,?,?,?,?,?,?,?) + INSERT INTO jobs(kind,status,project_id,document_id,prompt_id,title,file_path,user_prompt,created_at) + VALUES (?,?,?,?,?,?,?,?,?) """, ( kind, @@ -400,6 +408,7 @@ def enqueue_job(kind: str, **kwargs) -> int: kwargs.get("prompt_id"), kwargs.get("title"), kwargs.get("file_path"), + kwargs.get("user_prompt") or None, now_iso(), ), ) @@ -1253,34 +1262,90 @@ def run_page(): with db() as c: docs = c.execute("SELECT id,title,kind,created_at FROM documents ORDER BY id DESC LIMIT 200").fetchall() prompts = c.execute("SELECT id,name FROM prompts ORDER BY name").fetchall() + projects = c.execute("SELECT id,name FROM projects ORDER BY name").fetchall() d_opts = "".join([f"" for d in docs]) p_opts = "".join([f"" for p in prompts]) + proj_opts = "".join([f"" for p in projects]) body = f"""

Prompt ausführen

-
-
- - + +
+
+ +
+ + +
+
+ + +
+
+ + +
+ +
-
- - +
+
+
Führt den gewählten Prompt für alle Transkripte des Projekts aus — je Transkript ein Job.
+
+ + +
+
+ + +
+
+ + +
+ +
- - +
""" return layout("Run", body) @app.post("/run", response_class=HTMLResponse) -def run_prompt(document_id: int = Form(...), prompt_id: int = Form(...)): +def run_prompt(document_id: int = Form(...), prompt_id: int = Form(...), user_prompt: str = Form("")): with db() as c: doc = c.execute("SELECT id FROM documents WHERE id=?", (document_id,)).fetchone() prm = c.execute("SELECT id FROM prompts WHERE id=?", (prompt_id,)).fetchone() if not doc or not prm: raise HTTPException(404, "Dokument oder Prompt nicht gefunden") - job_id = enqueue_job("analysis", document_id=document_id, prompt_id=prompt_id) + job_id = enqueue_job("analysis", document_id=document_id, prompt_id=prompt_id, user_prompt=user_prompt.strip() or None) return HTMLResponse(f"") + + +@app.post("/run/project", response_class=HTMLResponse) +def run_project(project_id: int = Form(...), prompt_id: int = Form(...), user_prompt: str = Form("")): + with db() as c: + prm = c.execute("SELECT id FROM prompts WHERE id=?", (prompt_id,)).fetchone() + transcripts = c.execute( + "SELECT id FROM documents WHERE project_id=? AND kind='transcript'", + (project_id,), + ).fetchall() + if not prm: + raise HTTPException(404, "Prompt nicht gefunden") + if not transcripts: + raise HTTPException(400, "Keine Transkripte im Projekt gefunden") + + up = user_prompt.strip() or None + for doc in transcripts: + enqueue_job("analysis", document_id=doc["id"], prompt_id=prompt_id, user_prompt=up) + + return HTMLResponse("")