Admin-Plattform für die Tenants von Onyscribe: Editor mit Live-Vorschau (echter Core in Sandbox), Versionen, KI-Agent (Cortecs), OIDC-Abgleich über die Login-Developer-API, Deploy-Engine (Mittwald, gesperrt ohne DEPLOY_LIVE, Freigabe pro Tenant), Core-Vertrag (Schema/Manifest), Core-Releases mit Kompatibilitätsprüfung, Canary-Rollout und Rollback, Zustandsabgleich. Runbook: docs/RUNBOOK_PARALLELTEST.md Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
25 lines
1.3 KiB
Python
25 lines
1.3 KiB
Python
"""Prompt-Test: finalen Prompt vom Core bauen lassen (inkl. Hooks), LLM aufrufen."""
|
|
from __future__ import annotations
|
|
|
|
from app.services import llm, preview
|
|
from app.services.samples import SAMPLE_TRANSCRIPT, ROTARY_TRANSCRIPT
|
|
|
|
|
|
def user_content(transcript: str, terminart="", projekt="", kunde="", title="Beispiel") -> str:
|
|
return (f"Termin-Art: {terminart or '(aus Gespräch erkennen)'}\nProjektname: {projekt or '(keiner)'}\n"
|
|
f"Kunde / Unternehmen: {kunde or '(aus Gespräch erkennen)'}\nAnsprechpartner Kunde: (aus Gespräch erkennen)\n"
|
|
f"Meeting-Titel: {title}\n\nGesprächsprotokoll:\n{transcript}")
|
|
|
|
|
|
def default_transcript(tenant_id: str) -> str:
|
|
return ROTARY_TRANSCRIPT if tenant_id.startswith("rotary") else SAMPLE_TRANSCRIPT
|
|
|
|
|
|
def prompt_test(db, tenant, cfg, files, transcript: str | None, terminart="", projekt="", kunde="") -> dict:
|
|
transcript = (transcript or "").strip() or default_transcript(tenant.id)
|
|
r = preview.run_content(db, tenant, cfg, files, "prompt",
|
|
args={"title": "Prompt-Test", "terminart": terminart, "projekt": projekt, "kunde": kunde})
|
|
out = llm.summarize(db, r["prompt"], user_content(transcript, terminart, projekt, kunde, "Prompt-Test"), tenant_id=tenant.id)
|
|
out["prompt_chars"] = r["chars"]
|
|
return out
|