Commit a810c5a0 by ccran

feat: add nanobot llm;rules info; interface

parent dce41c59
...@@ -33,6 +33,7 @@ from core.tools.segment_merger import SegmentMergerTool ...@@ -33,6 +33,7 @@ from core.tools.segment_merger import SegmentMergerTool
from core.tools.fact_merger import FactMergerTool from core.tools.fact_merger import FactMergerTool
from core.tools.ruleset_router import RulesetRouterTool from core.tools.ruleset_router import RulesetRouterTool
from core.tools.party_role import PartyRoleTool from core.tools.party_role import PartyRoleTool
from core.tools.segment_llm import LLMTool
from core.memory import Finding from core.memory import Finding
from core.memory import FINDING_KEY_MERGE, FINDING_KEY_REFLECT, FINDING_KEY_REVIEW from core.memory import FINDING_KEY_MERGE, FINDING_KEY_REFLECT, FINDING_KEY_REVIEW
...@@ -49,6 +50,7 @@ merger_tool = SegmentMergerTool() ...@@ -49,6 +50,7 @@ merger_tool = SegmentMergerTool()
fact_merger_tool = FactMergerTool() fact_merger_tool = FactMergerTool()
ruleset_router_tool = RulesetRouterTool() ruleset_router_tool = RulesetRouterTool()
party_role_tool = PartyRoleTool() party_role_tool = PartyRoleTool()
nanobot_llm_tool = LLMTool(llm_key="nanobot_llm")
@app.post("/sleep") @app.post("/sleep")
...@@ -59,6 +61,31 @@ def sleep(t: int): ...@@ -59,6 +61,31 @@ def sleep(t: int):
return {"res": f"sleep over for {t} seconds."} return {"res": f"sleep over for {t} seconds."}
class NanobotLLMChatRequest(BaseModel):
session_id: str
user_message: str
class NanobotLLMChatResponse(BaseModel):
resuts: str
@app.post("/nanobot_llm_chat", response_model=NanobotLLMChatResponse)
async def nanobot_llm_chat(payload: NanobotLLMChatRequest) -> NanobotLLMChatResponse:
session_id = (payload.session_id or "").strip()
user_message = (payload.user_message or "").strip()
if not session_id:
raise HTTPException(status_code=400, detail="session_id cannot be empty")
if not user_message:
raise HTTPException(status_code=400, detail="user_message cannot be empty")
results = await nanobot_llm_tool.chat_async(
nanobot_llm_tool.build_messages(user_message),
session_id=session_id,
)
return NanobotLLMChatResponse(resuts=results)
######################################################################################################################## ########################################################################################################################
...@@ -447,12 +474,23 @@ class ReflectReviewRequest(BaseModel): ...@@ -447,12 +474,23 @@ class ReflectReviewRequest(BaseModel):
rule_title: str rule_title: str
class RuleStringifyRequest(BaseModel):
ruleset_id: Optional[str] = "通用"
rule_title: str
class ReflectReviewResponse(BaseModel): class ReflectReviewResponse(BaseModel):
conversation_id: str conversation_id: str
rule_title: str rule_title: str
findings: List[Dict] findings: List[Dict]
class RuleStringifyResponse(BaseModel):
ruleset_id: str
rule_title: str
rule_string: str
class MergerRequest(BaseModel): class MergerRequest(BaseModel):
conversation_id: str conversation_id: str
segment_id: int segment_id: int
...@@ -478,6 +516,25 @@ class FactsMergerResponse(BaseModel): ...@@ -478,6 +516,25 @@ class FactsMergerResponse(BaseModel):
merge_facts: Dict merge_facts: Dict
@app.post("/rules/stringify", response_model=RuleStringifyResponse)
def stringify_rule(payload: RuleStringifyRequest) -> RuleStringifyResponse:
ruleset_id = payload.ruleset_id or rules_reference_tool.default_ruleset_id
ruleset_items = rules_reference_tool.run(ruleset_id=ruleset_id).get("rules", [])
rule = next(
(r for r in ruleset_items if r.get("title") == payload.rule_title), None
)
if not rule:
raise HTTPException(
status_code=404, detail=f"Rule not found: {payload.rule_title}"
)
return RuleStringifyResponse(
ruleset_id=ruleset_id,
rule_title=payload.rule_title,
rule_string=reflect_tool._stringify_rule(rule),
)
@app.post("/segments/review/reflect", response_model=ReflectReviewResponse) @app.post("/segments/review/reflect", response_model=ReflectReviewResponse)
def reflect_review(payload: ReflectReviewRequest) -> ReflectReviewResponse: def reflect_review(payload: ReflectReviewRequest) -> ReflectReviewResponse:
store = get_cached_memory(payload.conversation_id) store = get_cached_memory(payload.conversation_id)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment