Skip to content

Commit c62e7b4

Browse files
committed
ingestion: tweak strategies
1 parent 46330fc commit c62e7b4

File tree

3 files changed

+34
-6
lines changed

3 files changed

+34
-6
lines changed

src/polar_sdk/ingestion/_base.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from polar_sdk import Polar
1111

1212
if TYPE_CHECKING:
13-
from polar_sdk import EventsModelTypedDict
13+
from polar_sdk import EventCreateCustomerMetadataTypedDict, EventsModelTypedDict
1414

1515
from .strategies._base import S
1616

@@ -59,14 +59,20 @@ def __init__(
5959

6060
atexit.register(self.close)
6161

62-
def strategy(self, strategy_class: type["S"], event_name: str) -> "S":
62+
def strategy(
63+
self,
64+
strategy_class: type["S"],
65+
event_name: str,
66+
**metadata: "EventCreateCustomerMetadataTypedDict",
67+
) -> "S":
6368
"""
6469
Instantiate a strategy tied to this ingestion client.
6570
6671
:param strategy_class: The strategy class to instantiate.
6772
:param event_name: The name of the events that'll be reported by the strategy.
73+
:param metadata: Extra metadata to include with all events.
6874
"""
69-
return strategy_class(event_name, self)
75+
return strategy_class(event_name, self, metadata=metadata)
7076

7177
def ingest(self, event: "EventsModelTypedDict") -> None:
7278
"""

src/polar_sdk/ingestion/strategies/_base.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,29 @@
1-
from typing import Any, TypeVar
1+
from typing import TYPE_CHECKING, Any, TypeVar, Union
22

33
from .._base import Ingestion
44

5+
if TYPE_CHECKING:
6+
from polar_sdk import EventCreateCustomerMetadataTypedDict
7+
58

69
class BaseStrategy:
710
"""
811
Base structure of an event ingestion strategy.
912
1013
:param event_name: The name of the events that'll be reported by the strategy.
1114
:param ingestion: The ingestion client to use for sending events.
15+
:param metadata: Extra metadata to include with all events.
1216
"""
1317

14-
def __init__(self, event_name: str, ingestion: Ingestion) -> None:
18+
def __init__(
19+
self,
20+
event_name: str,
21+
ingestion: Ingestion,
22+
metadata: Union[dict[str, "EventCreateCustomerMetadataTypedDict"], None] = None,
23+
) -> None:
1524
self.event_name = event_name
1625
self._ingestion = ingestion
26+
self._metadata = metadata or {}
1727

1828
def ingest(self, external_customer_id: str, *args: Any, **kwargs: Any) -> None:
1929
"""

src/polar_sdk/ingestion/strategies/pydantic_ai.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,31 @@
11
from typing import Any
22

33
from pydantic_ai.agent import AgentRunResult
4+
from pydantic_ai.models import TYPE_CHECKING
45

56
from ._base import BaseStrategy
67

8+
if TYPE_CHECKING:
9+
from polar_sdk import EventCreateCustomerMetadataTypedDict
10+
711

812
class PydanticAIStrategy(BaseStrategy):
913
"""
1014
An ingestion strategy to report usage from PydanticAI agent runs.
1115
"""
1216

13-
def ingest(self, external_customer_id: str, result: AgentRunResult[Any]) -> None:
17+
def ingest(
18+
self,
19+
external_customer_id: str,
20+
result: AgentRunResult[Any],
21+
**metadata: "EventCreateCustomerMetadataTypedDict",
22+
) -> None:
1423
"""
1524
Report usage from a PydanticAI agent run.
1625
1726
:param external_customer_id: The external customer ID to associate with the event.
1827
:param result: The result of the agent run.
28+
:param metadata: Extra metadata to include with the event.
1929
"""
2030
usage = result.usage()
2131
self._ingestion.ingest(
@@ -27,6 +37,8 @@ def ingest(self, external_customer_id: str, result: AgentRunResult[Any]) -> None
2737
"response_tokens": usage.response_tokens or 0,
2838
"total_tokens": usage.total_tokens or 0,
2939
"requests": usage.requests or 0,
40+
**self._metadata,
41+
**metadata,
3042
},
3143
}
3244
)

0 commit comments

Comments
 (0)