Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion packages/api/src/flux0_api/session_service.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import asyncio
from datetime import datetime, timezone
from typing import Optional, Union
from typing import Mapping, Optional, Union

from flux0_core.agent_runners.api import AgentRunnerFactory, Deps
from flux0_core.agent_runners.context import Context
Expand All @@ -20,6 +20,7 @@
StatusEventData,
ToolEventData,
)
from flux0_core.types import JSONSerializable
from flux0_core.users import UserId
from flux0_stream.emitter.api import EventEmitter

Expand Down Expand Up @@ -50,13 +51,15 @@ async def create_user_session(
id: Optional[SessionId] = None,
title: Optional[str] = None,
allow_greeting: bool = False,
metadata: Optional[Mapping[str, JSONSerializable]] = None,
) -> Session:
session = await self._session_store.create_session(
user_id=user_id,
agent_id=agent.id,
id=id,
title=title,
created_at=datetime.now(timezone.utc),
metadata=metadata,
)

if allow_greeting:
Expand Down
4 changes: 4 additions & 0 deletions packages/api/src/flux0_api/sessions.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ async def create_session_route(
agent=agent,
title=params.title,
allow_greeting=allow_greeting,
metadata=params.metadata,
)

return SessionDTO(
Expand All @@ -126,6 +127,7 @@ async def create_session_route(
title=session.title,
consumption_offsets=ConsumptionOffsetsDTO(client=session.consumption_offsets["client"]),
created_at=session.created_at,
metadata=session.metadata,
)

return create_session_route
Expand Down Expand Up @@ -172,6 +174,7 @@ async def retrieve_session(
client=session.consumption_offsets["client"],
),
created_at=session.created_at,
metadata=session.metadata,
)

return retrieve_session
Expand Down Expand Up @@ -219,6 +222,7 @@ async def list_sessions(
client=s.consumption_offsets["client"],
),
created_at=s.created_at,
metadata=s.metadata,
)
for s in sessions
]
Expand Down
11 changes: 9 additions & 2 deletions packages/api/src/flux0_api/types_session.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from datetime import datetime
from enum import Enum
from typing import Annotated, Optional, Sequence, TypeAlias
from typing import Annotated, Mapping, Optional, Sequence, TypeAlias

import dateutil.parser
from fastapi import Path, Query
Expand All @@ -9,7 +9,12 @@
from flux0_core.users import UserId
from pydantic import Field

from flux0_api.common import DEFAULT_MODEL_CONFIG, DefaultBaseModel, ExampleJson
from flux0_api.common import (
DEFAULT_MODEL_CONFIG,
DefaultBaseModel,
ExampleJson,
JSONSerializableDTO,
)
from flux0_api.types_agents import agent_id_example, agent_title_example
from flux0_api.types_users import user_id_example

Expand Down Expand Up @@ -110,6 +115,7 @@ class SessionDTO(DefaultBaseModel):
title: Optional[SessionTitleField] = None
consumption_offsets: ConsumptionOffsetsDTO
created_at: SessionCreatedField
metadata: Optional[Mapping[str, JSONSerializableDTO]] = None


class SessionsDTO(DefaultBaseModel):
Expand Down Expand Up @@ -139,6 +145,7 @@ class SessionCreationParamsDTO(DefaultBaseModel):
agent_id: SessionAgentIdPath
id: Optional[SessionIdPath] = None
title: Optional[SessionTitleField] = None
metadata: Optional[Mapping[str, JSONSerializableDTO]] = None


AllowGreetingQuery: TypeAlias = Annotated[
Expand Down
1 change: 1 addition & 0 deletions packages/api/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ def session() -> Session:
title="Test Session",
consumption_offsets={},
created_at=datetime.now(timezone.utc),
metadata={},
)


Expand Down
2 changes: 2 additions & 0 deletions packages/core/src/flux0_core/sessions.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class Session:
title: Optional[str]
consumption_offsets: Mapping[ConsumerId, int]
created_at: datetime
metadata: Optional[Mapping[str, JSONSerializable]]


class SessionUpdateParams(TypedDict, total=False):
Expand Down Expand Up @@ -173,6 +174,7 @@ async def create_session(
id: Optional[SessionId] = None,
mode: Optional[SessionMode] = None,
title: Optional[str] = None,
metadata: Optional[Mapping[str, JSONSerializable]] = None,
created_at: Optional[datetime] = None,
) -> Session: ...

Expand Down
5 changes: 5 additions & 0 deletions packages/core/src/flux0_core/storage/nanodb_memory.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,7 @@ class _SessionDocument(TypedDict, total=False):
title: Optional[str]
consumption_offsets: Mapping[ConsumerId, int]
created_at: datetime
metadata: Optional[Mapping[str, JSONSerializable]]


@dataclass(frozen=True)
Expand Down Expand Up @@ -305,6 +306,7 @@ def _serialize_session(
title=session.title,
consumption_offsets=session.consumption_offsets,
created_at=session.created_at,
metadata=session.metadata,
)

def _deserialize_session(
Expand All @@ -319,6 +321,7 @@ def _deserialize_session(
title=doc.get("title"),
consumption_offsets=doc["consumption_offsets"],
created_at=doc["created_at"],
metadata=doc.get("metadata", None),
)

def _serialize_event(
Expand Down Expand Up @@ -364,6 +367,7 @@ async def create_session(
id: Optional[SessionId] = None,
mode: Optional[SessionMode] = None,
title: Optional[str] = None,
metadata: Optional[Mapping[str, JSONSerializable]] = None,
created_at: Optional[datetime] = None,
) -> Session:
created_at = created_at or datetime.now(timezone.utc)
Expand All @@ -376,6 +380,7 @@ async def create_session(
title=title,
consumption_offsets=consumption_offsets,
created_at=created_at,
metadata=metadata,
)
await self._session_col.insert_one(document=self._serialize_session(session))
return session
Expand Down