Skip to content

Commit c9573ba

Browse files
committed
Base template
1 parent d284c70 commit c9573ba

File tree

14 files changed

+272
-3
lines changed

14 files changed

+272
-3
lines changed

.env

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CLERK_API_KEY=your_clerk_api_key_here
2+
SQL_ALCHEMY_DEBUG=true
3+
DB_HOST=localhost
4+
DB_PORT=5432
5+
DB_USER=postgres
6+
DB_PASSWORD=postgres
7+
DB_NAME=postgres
8+
AUTH_DISABLED=true
9+
CORS_ORIGINS=["http://localhost:3000"]
10+
CLERK_SECRET_KEY=sk_test_vu47nWkVclhjdfiYm2cKBauqvKLQrgb7lQuQi1AsSu
11+
CLERK_WEBHOOK_SIGNING_SECRET=whsec_e3YQjXDLFQVQEPVk/BPozhut+6adh/Cu

app/api/tags.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,11 @@
33

44
class Tags(Enum):
55
ping = "Ping"
6+
memory = "Memory"
7+
context = "Context"
8+
admin = "Admin"
9+
archive = "Archive"
10+
event = "Event"
11+
permission = "Permission"
12+
util = "Util"
13+

app/api/v1/controller/admin_api.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import logging
2+
from fastapi import APIRouter
3+
from app.api.tags import Tags
4+
5+
logger = logging.getLogger(__name__)
6+
7+
router = APIRouter(prefix="/admin", tags=[Tags.admin])
8+
9+
10+
@router.get("/healthz")
11+
def health_check():
12+
return {"status": "OK", "message": "Service is alive and healthy"}
13+
14+
15+
@router.post("/embedding/refresh")
16+
def refresh_embeddings():
17+
return {"status": "OK", "message": "Embeddings refreshed for all memory nodes"}
18+
19+
20+
@router.get("/metrics")
21+
def usage_metrics():
22+
return {"status": "OK", "message": "Memory, search, and log usage metrics returned"}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import logging
2+
3+
from fastapi import APIRouter
4+
from fastapi.params import Path
5+
6+
from app.api.tags import Tags
7+
8+
logger = logging.getLogger(__name__)
9+
10+
router = APIRouter(prefix="/archive", tags=[Tags.archive])
11+
12+
13+
@router.get("/")
14+
def list_archived_memories():
15+
return {"status": "OK", "message": "List of archived memory nodes returned"}
16+
17+
18+
@router.post("/memory")
19+
def archive_expired_memories():
20+
return {"status": "OK", "message": "Expired memory nodes archived"}
21+
22+
23+
@router.post("/restore/{memory_id}")
24+
def restore_archived_memory(memory_id: str = Path(...)):
25+
return {"status": "OK", "message": f"Memory node {memory_id} restored from archive"}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import logging
2+
3+
from fastapi import APIRouter
4+
from fastapi.params import Query, Path
5+
6+
from app.api.tags import Tags
7+
8+
logger = logging.getLogger(__name__)
9+
10+
router = APIRouter(prefix="/context", tags=[Tags.context])
11+
12+
13+
@router.get("/")
14+
def get_context(top_k: int = Query(5)):
15+
return {"status": "OK", "message": f"Top {top_k} context memories returned"}
16+
17+
18+
@router.get("/search")
19+
def search_memory(q: str = Query(...)):
20+
return {"status": "OK", "message": f"Semantic search results for: '{q}'"}
21+
22+
23+
@router.get("/related/{memory_id}")
24+
def related_memory(memory_id: str = Path(...)):
25+
return {"status": "OK", "message": f"Related memories for node {memory_id}"}

app/api/v1/controller/event_api.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import logging
2+
3+
from fastapi import APIRouter
4+
from fastapi.params import Query
5+
6+
from app.api.tags import Tags
7+
8+
logger = logging.getLogger(__name__)
9+
10+
router = APIRouter(prefix="/event", tags=[Tags.event])
11+
12+
13+
@router.post("/")
14+
def log_event():
15+
return {"status": "OK", "message": "New event log appended"}
16+
17+
18+
@router.get("/")
19+
def list_events(user_id: str = Query(None), event_type: str = Query(None), limit: int = Query(50)):
20+
return {
21+
"status": "OK",
22+
"message": f"Events fetched for user={user_id}, type={event_type}, limit={limit}"
23+
}
24+
25+
26+
@router.get("/context")
27+
def get_recent_events(limit: int = Query(10)):
28+
return {"status": "OK", "message": f"Most recent {limit} events returned for summarization"}
29+
30+
31+
@router.post("/summary")
32+
def summarize_events():
33+
return {"status": "OK", "message": "Events summarized and stored as memory node"}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import logging
2+
3+
from fastapi import APIRouter
4+
from fastapi.params import Query, Path
5+
6+
from app.api.tags import Tags
7+
8+
logger = logging.getLogger(__name__)
9+
10+
router = APIRouter(prefix="/memory", tags=[Tags.memory])
11+
12+
13+
@router.get("/")
14+
def list_memories(tag: str = Query(None), type: str = Query(None), user: str = Query(None)):
15+
return {"status": "OK", "message": "List memory nodes (filtered by tag/type/user)"}
16+
17+
18+
@router.post("/")
19+
def create_memory():
20+
return {"status": "OK", "message": "New memory node created"}
21+
22+
23+
@router.get("/{memory_id}")
24+
def get_memory(memory_id: str = Path(...)):
25+
return {"status": "OK", "message": f"Fetched memory node {memory_id}"}
26+
27+
28+
@router.patch("/{memory_id}")
29+
def update_memory(memory_id: str = Path(...)):
30+
return {"status": "OK", "message": f"Updated memory node {memory_id}"}
31+
32+
33+
@router.delete("/{memory_id}")
34+
def delete_memory(memory_id: str = Path(...)):
35+
return {"status": "OK", "message": f"Deleted memory node {memory_id}"}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import logging
2+
3+
from fastapi import APIRouter
4+
from fastapi.params import Path
5+
6+
from app.api.tags import Tags
7+
8+
logger = logging.getLogger(__name__)
9+
10+
router = APIRouter(prefix="/permission", tags=[Tags.permission])
11+
12+
13+
@router.post("/")
14+
def create_permission():
15+
return {"status": "OK", "message": "Permission rule created"}
16+
17+
18+
@router.patch("/memory/{memory_id}")
19+
def update_memory_permission(memory_id: str = Path(...)):
20+
return {"status": "OK", "message": f"Permission for memory {memory_id} updated"}
21+
22+
23+
@router.get("/memory/{memory_id}")
24+
def get_memory_permission(memory_id: str = Path(...)):
25+
return {"status": "OK", "message": f"Fetched permission for memory {memory_id}"}

app/api/v1/controller/util_api.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import logging
2+
from fastapi import APIRouter
3+
from app.api.tags import Tags
4+
5+
logger = logging.getLogger(__name__)
6+
7+
router = APIRouter(prefix="/util", tags=[Tags.util])
8+
9+
10+
@router.get("/export")
11+
def export_user_data():
12+
return {"status": "OK", "message": "Exported all memories and logs for user"}
13+
14+
15+
@router.post("/import")
16+
def import_user_data():
17+
return {"status": "OK", "message": "Imported user memories and logs from file"}

app/api/v1/router.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,22 @@
11
from fastapi import APIRouter
22

33
from app.api.v1.controller.ping_api import router as ping_api_router
4+
from app.api.v1.controller.memory_api import router as memory_api_router
5+
from app.api.v1.controller.admin_api import router as admin_api_router
6+
from app.api.v1.controller.event_api import router as event_api_router
7+
from app.api.v1.controller.permission_api import router as permission_api_router
8+
from app.api.v1.controller.util_api import router as util_api_router
9+
from app.api.v1.controller.archive_api import router as archive_api_router
10+
from app.api.v1.controller.context_api import router as context_api_router
411

512
router = APIRouter(prefix="/v1")
613

714
# Mount feature routers
815
router.include_router(ping_api_router)
16+
router.include_router(memory_api_router)
17+
router.include_router(admin_api_router)
18+
router.include_router(event_api_router)
19+
router.include_router(permission_api_router)
20+
router.include_router(util_api_router)
21+
router.include_router(archive_api_router)
22+
router.include_router(context_api_router)

0 commit comments

Comments
 (0)