79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
import sys
|
|
sys.path.insert(0, '/opt/guanghulab-repo/zhuyuan-agent')
|
|
|
|
from fastapi import FastAPI, HTTPException
|
|
from pydantic import BaseModel
|
|
from typing import Optional, List
|
|
import os, json, time
|
|
|
|
from core.hldp_memory import HLDPMemoryEngine, PERSONA_ID, HLDP_ROOT
|
|
from core.persona_contract import pre_check_context, post_check_warnings
|
|
|
|
app = FastAPI(title='铸渊 Agent API', version='1.0.0')
|
|
engine = HLDPMemoryEngine()
|
|
startup_msg = engine.wake()
|
|
print(f'[铸渊] {startup_msg["status"]}')
|
|
tree = engine.tree
|
|
|
|
class ChatRequest(BaseModel):
|
|
message: str
|
|
user_id: Optional[str] = 'ice-shuo'
|
|
|
|
class MemoryRecord(BaseModel):
|
|
path: str
|
|
trigger: str
|
|
emergence: str
|
|
lock_value: str
|
|
why: str = ''
|
|
|
|
class MemorySearch(BaseModel):
|
|
query: str
|
|
limit: int = 10
|
|
|
|
@app.get('/health')
|
|
async def health():
|
|
return {'status': 'ok', 'persona': '铸渊', 'epoch': 'D112', 'time': time.time()}
|
|
|
|
@app.get('/status')
|
|
async def status():
|
|
w = tree.walk_tree(PERSONA_ID, max_depth=3)
|
|
return {'status': 'running', 'tree_layers': {
|
|
'root': str(w.get('layer_0_root',''))[:80],
|
|
'epochs': len(w.get('layer_1_epochs', [])),
|
|
'leaves': len(w.get('layer_2_leaves', []))
|
|
}}
|
|
|
|
@app.get('/wake')
|
|
async def wake():
|
|
msg = engine.wake()
|
|
return {'wake': msg, 'status': 'ok'}
|
|
|
|
@app.get('/memory/recent')
|
|
async def recent_leaves(limit: int = 10):
|
|
leaves = tree.get_recent_leaves(PERSONA_ID, limit=limit)
|
|
return {'leaves': leaves, 'count': len(leaves)}
|
|
|
|
@app.post('/chat')
|
|
async def chat(req: ChatRequest):
|
|
ctx = engine.inject_context(req.message)
|
|
return {'response': '铸渊已就绪 ▏HLDP记忆引擎在线', 'message': req.message, 'context_injected': ctx[:200] if ctx else ''}
|
|
|
|
@app.post('/memory/search')
|
|
async def search_memory(req: MemorySearch):
|
|
results = tree.search_leaves(req.query, PERSONA_ID, limit=req.limit)
|
|
return {'results': results, 'count': len(results)}
|
|
|
|
@app.post('/memory/record')
|
|
async def record_memory(req: MemoryRecord):
|
|
leaf_id = tree.grow_leaf(req.path, req.trigger, req.emergence, req.lock_value, req.why)
|
|
return {'leaf_id': leaf_id, 'path': req.path}
|
|
|
|
@app.delete('/memory/{path:path}')
|
|
async def forget_memory(path: str):
|
|
ok = tree.forget(path)
|
|
return {'deleted': ok, 'path': path}
|
|
|
|
if __name__ == '__main__':
|
|
import uvicorn
|
|
uvicorn.run(app, host='0.0.0.0', port=int(os.getenv('SERVER_PORT', '3912')))
|