Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
ccran
/
lufa-contract
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
a810c5a0
authored
Jun 24, 2026
by
ccran
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: add nanobot llm;rules info; interface
parent
dce41c59
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
57 additions
and
0 deletions
+57
-0
main.py
+57
-0
No files found.
main.py
View file @
a810c5a0
...
@@ -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
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment