feat(agent): v4.15.2 - skills multi-epingles en bulles + chips de contexte cliquables
- Les skills (menu /, integres et enregistres) s'epinglent comme des bulles dans le composer, au meme titre que les mentions @; plusieurs peuvent coexister sur un meme post - L'API /run accepte skill_ids (tableau) et l'engine injecte tous leurs prompts dans le system prompt (skill_id conserve pour retro-compat) - Clic sur une bulle de contexte (@ document/page/base) ouvre l'element comme document courant (/pages/<id> ou /db/<id>); le bouton x retire sans ouvrir - Envoi possible avec des skills seuls sans texte - test_engine_multiple_skills_applied
This commit is contained in:
@@ -399,6 +399,38 @@ def test_engine_tool_protocol_messages(client):
|
||||
assert payload["status"] == "ok"
|
||||
|
||||
|
||||
def test_engine_multiple_skills_applied(client):
|
||||
"""Plusieurs skills (skill_ids) sont injectés ensemble dans les instructions."""
|
||||
from app.services.agent_engine import AgentEngine
|
||||
from app.db import get_conn
|
||||
|
||||
with get_conn() as conn:
|
||||
c1 = conn.execute(
|
||||
"INSERT INTO agent_skills (workspace_id, name, description, prompt_template, allowed_tools_json, created_by) "
|
||||
"VALUES (NULL, 'Skill A', '', 'Template A', '[]', ?)", (_admin_id(),))
|
||||
c2 = conn.execute(
|
||||
"INSERT INTO agent_skills (workspace_id, name, description, prompt_template, allowed_tools_json, created_by) "
|
||||
"VALUES (NULL, 'Skill B', '', 'Template B', '[]', ?)", (_admin_id(),))
|
||||
conn.commit()
|
||||
id1, id2 = c1.lastrowid, c2.lastrowid
|
||||
|
||||
class FakeLLM:
|
||||
def __init__(self):
|
||||
self.system = ""
|
||||
|
||||
async def complete(self, messages, *, model=None, tools=None, stream=False):
|
||||
self.system = next((m["content"] for m in messages if m["role"] == "system"), "")
|
||||
return _Resp("ok", [])
|
||||
|
||||
fake = FakeLLM()
|
||||
engine = AgentEngine(_admin_id(), llm=fake)
|
||||
conv = client.post("/api/agent/conversations", json={"title": "multi-skill"}).json()["id"]
|
||||
asyncio.run(_run_engine(engine, conv, "bonjour", skill_ids=[id1, id2]))
|
||||
|
||||
assert "Skill A" in fake.system and "Template A" in fake.system
|
||||
assert "Skill B" in fake.system and "Template B" in fake.system
|
||||
|
||||
|
||||
def _make_conversation(client) -> int:
|
||||
resp = client.post("/api/agent/conversations", json={"title": "test"})
|
||||
return resp.json()["id"]
|
||||
|
||||
Reference in New Issue
Block a user