MCPcopy Create free account
hub / github.com/AgentOps-AI/agentops / create_session

Function create_session

app/api/agentops/api/routes/v1.py:19–84  ·  view source on GitHub ↗

Create a new session

(request: Request, supabase: AsyncSupabaseClient)

Source from the content-addressed store, hash-verified

17
18@router.post("/sessions")
19async def create_session(request: Request, supabase: AsyncSupabaseClient):
20 """Create a new session"""
21 try:
22 api_key = request.headers.get("X-Agentops-Auth")
23 parent_key = request.headers.get("X-Agentops-Parent-Key")
24
25 tasks = [
26 supabase.table("projects").select("id").eq("api_key", api_key).limit(1).single().execute(),
27 request.json(),
28 ]
29
30 if parent_key:
31 tasks.append(
32 supabase.table("projects").select("id").eq("api_key", parent_key).limit(1).single().execute()
33 )
34 project, data, project_secondary = await asyncio.gather(*tasks)
35 else:
36 project, data = await asyncio.gather(*tasks)
37 project_secondary = None
38
39 logger.debug(data)
40
41 if project is None:
42 raise RuntimeError("Invalid API Key")
43
44 except RuntimeError as e:
45 message = {"message": f"/sessions: Error posting session: {e}"}
46 logger.error(message)
47 return JSONResponse(message, status_code=401)
48
49 try:
50 session = {
51 "id": data["session"]["session_id"],
52 "project_id": project["id"],
53 "init_timestamp": data["session"]["init_timestamp"],
54 "end_timestamp": data["session"].get("end_timestamp", None),
55 "tags": data["session"].get("tags", None),
56 "end_state": data["session"].get("end_state", None),
57 "end_state_reason": data["session"].get("end_state_reason", None),
58 "video": data["session"].get("video", None),
59 "host_env": data["session"].get("host_env", None),
60 }
61
62 if project_secondary:
63 session["project_id_secondary"] = project_secondary["id"]
64
65 await supabase.table("sessions").upsert(session).execute()
66 await supabase.table("stats").upsert({"session_id": session["id"]}).execute()
67
68 cost = await (
69 supabase.table("stats").select("cost").eq("session_id", session["id"]).limit(1).single().execute()
70 )
71
72 logger.info(f"/session: Completed POST request for {session['id']}")
73 if cost is not None:
74 return JSONResponse(
75 {
76 "status": "success",

Callers

nothing calls this directly

Calls 4

jsonMethod · 0.80
upsertMethod · 0.80
getMethod · 0.45
selectMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…