Skip to content

Commit ea1a751

Browse files
committed
fix: support metadata in session crud
resolves #95
1 parent 753460b commit ea1a751

File tree

6 files changed

+24
-3
lines changed

6 files changed

+24
-3
lines changed

packages/api/src/flux0_api/session_service.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import asyncio
22
from datetime import datetime, timezone
3-
from typing import Optional, Union
3+
from typing import Mapping, Optional, Union
44

55
from flux0_core.agent_runners.api import AgentRunnerFactory, Deps
66
from flux0_core.agent_runners.context import Context
@@ -20,6 +20,7 @@
2020
StatusEventData,
2121
ToolEventData,
2222
)
23+
from flux0_core.types import JSONSerializable
2324
from flux0_core.users import UserId
2425
from flux0_stream.emitter.api import EventEmitter
2526

@@ -50,13 +51,15 @@ async def create_user_session(
5051
id: Optional[SessionId] = None,
5152
title: Optional[str] = None,
5253
allow_greeting: bool = False,
54+
metadata: Optional[Mapping[str, JSONSerializable]] = None,
5355
) -> Session:
5456
session = await self._session_store.create_session(
5557
user_id=user_id,
5658
agent_id=agent.id,
5759
id=id,
5860
title=title,
5961
created_at=datetime.now(timezone.utc),
62+
metadata=metadata,
6063
)
6164

6265
if allow_greeting:

packages/api/src/flux0_api/sessions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ async def create_session_route(
117117
agent=agent,
118118
title=params.title,
119119
allow_greeting=allow_greeting,
120+
metadata=params.metadata,
120121
)
121122

122123
return SessionDTO(
@@ -126,6 +127,7 @@ async def create_session_route(
126127
title=session.title,
127128
consumption_offsets=ConsumptionOffsetsDTO(client=session.consumption_offsets["client"]),
128129
created_at=session.created_at,
130+
metadata=session.metadata,
129131
)
130132

131133
return create_session_route
@@ -172,6 +174,7 @@ async def retrieve_session(
172174
client=session.consumption_offsets["client"],
173175
),
174176
created_at=session.created_at,
177+
metadata=session.metadata,
175178
)
176179

177180
return retrieve_session
@@ -219,6 +222,7 @@ async def list_sessions(
219222
client=s.consumption_offsets["client"],
220223
),
221224
created_at=s.created_at,
225+
metadata=s.metadata,
222226
)
223227
for s in sessions
224228
]

packages/api/src/flux0_api/types_session.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from datetime import datetime
22
from enum import Enum
3-
from typing import Annotated, Optional, Sequence, TypeAlias
3+
from typing import Annotated, Mapping, Optional, Sequence, TypeAlias
44

55
import dateutil.parser
66
from fastapi import Path, Query
@@ -9,7 +9,12 @@
99
from flux0_core.users import UserId
1010
from pydantic import Field
1111

12-
from flux0_api.common import DEFAULT_MODEL_CONFIG, DefaultBaseModel, ExampleJson
12+
from flux0_api.common import (
13+
DEFAULT_MODEL_CONFIG,
14+
DefaultBaseModel,
15+
ExampleJson,
16+
JSONSerializableDTO,
17+
)
1318
from flux0_api.types_agents import agent_id_example, agent_title_example
1419
from flux0_api.types_users import user_id_example
1520

@@ -110,6 +115,7 @@ class SessionDTO(DefaultBaseModel):
110115
title: Optional[SessionTitleField] = None
111116
consumption_offsets: ConsumptionOffsetsDTO
112117
created_at: SessionCreatedField
118+
metadata: Optional[Mapping[str, JSONSerializableDTO]] = None
113119

114120

115121
class SessionsDTO(DefaultBaseModel):
@@ -139,6 +145,7 @@ class SessionCreationParamsDTO(DefaultBaseModel):
139145
agent_id: SessionAgentIdPath
140146
id: Optional[SessionIdPath] = None
141147
title: Optional[SessionTitleField] = None
148+
metadata: Optional[Mapping[str, JSONSerializableDTO]] = None
142149

143150

144151
AllowGreetingQuery: TypeAlias = Annotated[

packages/api/tests/conftest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ def session() -> Session:
7070
title="Test Session",
7171
consumption_offsets={},
7272
created_at=datetime.now(timezone.utc),
73+
metadata={},
7374
)
7475

7576

packages/core/src/flux0_core/sessions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class Session:
3535
title: Optional[str]
3636
consumption_offsets: Mapping[ConsumerId, int]
3737
created_at: datetime
38+
metadata: Optional[Mapping[str, JSONSerializable]]
3839

3940

4041
class SessionUpdateParams(TypedDict, total=False):
@@ -173,6 +174,7 @@ async def create_session(
173174
id: Optional[SessionId] = None,
174175
mode: Optional[SessionMode] = None,
175176
title: Optional[str] = None,
177+
metadata: Optional[Mapping[str, JSONSerializable]] = None,
176178
created_at: Optional[datetime] = None,
177179
) -> Session: ...
178180

packages/core/src/flux0_core/storage/nanodb_memory.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,7 @@ def _serialize_session(
305305
title=session.title,
306306
consumption_offsets=session.consumption_offsets,
307307
created_at=session.created_at,
308+
metadata=session.metadata,
308309
)
309310

310311
def _deserialize_session(
@@ -319,6 +320,7 @@ def _deserialize_session(
319320
title=doc.get("title"),
320321
consumption_offsets=doc["consumption_offsets"],
321322
created_at=doc["created_at"],
323+
metadata=doc.get("metadata", None),
322324
)
323325

324326
def _serialize_event(
@@ -364,6 +366,7 @@ async def create_session(
364366
id: Optional[SessionId] = None,
365367
mode: Optional[SessionMode] = None,
366368
title: Optional[str] = None,
369+
metadata: Optional[Mapping[str, JSONSerializable]] = None,
367370
created_at: Optional[datetime] = None,
368371
) -> Session:
369372
created_at = created_at or datetime.now(timezone.utc)
@@ -376,6 +379,7 @@ async def create_session(
376379
title=title,
377380
consumption_offsets=consumption_offsets,
378381
created_at=created_at,
382+
metadata=metadata,
379383
)
380384
await self._session_col.insert_one(document=self._serialize_session(session))
381385
return session

0 commit comments

Comments
 (0)