fix(agent): v4.13.1 - actions contenu document (resume/traduire/ameliorer/meeting) sans outils, apercu + appliquer/rejeter, mock ignore contexte
This commit is contained in:
@@ -310,6 +310,62 @@ async def run_conversation(request: Request, conversation_id: int):
|
||||
)
|
||||
|
||||
|
||||
@router.post("/generate")
|
||||
async def agent_generate(request: Request):
|
||||
"""Headless text generation (NO tools) for content actions on documents.
|
||||
|
||||
Used by the Agent panel's contextual actions ("Résumer ce document",
|
||||
"Traduire cette page", "Proposer des améliorations", "AI meeting note").
|
||||
Because no tool schema is offered, the model answers with plain text based on
|
||||
the provided document context instead of issuing search_workspace / tools.
|
||||
"""
|
||||
user_id = await _current_user_id(request)
|
||||
body = await request.json() if request.headers.get("content-type") else {}
|
||||
prompt = (body.get("prompt") or "").strip()
|
||||
if not prompt:
|
||||
raise HTTPException(status_code=400, detail="prompt est requis")
|
||||
provider = (body.get("provider") or "").strip().lower() or None
|
||||
model = (body.get("model") or "").strip() or None
|
||||
context = (body.get("context") or "") or ""
|
||||
|
||||
llm = LLMClient()
|
||||
if provider:
|
||||
if provider not in PROVIDERS:
|
||||
raise HTTPException(status_code=400, detail=f"Provider inconnu: {provider}")
|
||||
user_key = get_user_llm_key(user_id, provider)
|
||||
if user_key and user_key.get("api_key"):
|
||||
llm = LLMClient(provider=provider, api_key=user_key["api_key"],
|
||||
api_base=(user_key.get("api_base") or "").strip() or None)
|
||||
else:
|
||||
llm = LLMClient(provider=provider)
|
||||
offline = llm.provider == "offline" or not llm._has_credentials()
|
||||
|
||||
system = (
|
||||
"Tu es l'assistant d'édition de FlowDeck (contenu). "
|
||||
"Réponds UNIQUEMENT avec le texte demandé, en Markdown léger "
|
||||
"(paragraphes, listes à puces, titres si utile). "
|
||||
"N'ajoute aucun préambule, aucun commentaire, aucun bloc de code autour du texte. "
|
||||
"Fonde ta réponse sur le contexte du document fourni."
|
||||
)
|
||||
user_content = prompt
|
||||
if context and context.strip():
|
||||
user_content += "\n\n# Contexte du document\n" + context.strip()[:20000]
|
||||
messages = [
|
||||
{"role": "system", "content": system},
|
||||
{"role": "user", "content": user_content},
|
||||
]
|
||||
try:
|
||||
resp = await llm.complete(messages, model=model or None, tools=None, stream=False)
|
||||
except Exception as exc: # noqa: BLE001 — surface connectivity errors
|
||||
return {"ok": False, "error": str(exc), "offline": offline, "model": model or ""}
|
||||
return {
|
||||
"ok": True,
|
||||
"text": (resp.text or "").strip(),
|
||||
"model": resp.model or model or "",
|
||||
"offline": offline,
|
||||
}
|
||||
|
||||
|
||||
# ── Audit & rollback ──
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user