genailit 0.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- genailit/__init__.py +13 -0
- genailit/adapters/__init__.py +7 -0
- genailit/adapters/base.py +38 -0
- genailit/events.py +13 -0
- genailit/telemetry.py +23 -0
- genailit-0.0.1.dist-info/METADATA +53 -0
- genailit-0.0.1.dist-info/RECORD +8 -0
- genailit-0.0.1.dist-info/WHEEL +4 -0
genailit/__init__.py
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from .adapters import AdapterContext, BaseAgentAdapter
|
|
2
|
+
from .events import GenAILitEvent
|
|
3
|
+
from .telemetry import TelemetryStore
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"AdapterContext",
|
|
7
|
+
"BaseAgentAdapter",
|
|
8
|
+
"GenAILitEvent",
|
|
9
|
+
"TelemetryStore",
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
__version__ = "0.0.1"
|
|
13
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from dataclasses import dataclass, field
|
|
5
|
+
from collections.abc import Iterable, Mapping
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from ..events import GenAILitEvent
|
|
9
|
+
from ..telemetry import TelemetryStore
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass(frozen=True, slots=True)
|
|
13
|
+
class AdapterContext:
|
|
14
|
+
session_id: str
|
|
15
|
+
telemetry: TelemetryStore | None = None
|
|
16
|
+
metadata: Mapping[str, Any] = field(default_factory=dict)
|
|
17
|
+
|
|
18
|
+
def with_metadata(self, **items: Any) -> "AdapterContext":
|
|
19
|
+
merged = dict(self.metadata)
|
|
20
|
+
merged.update(items)
|
|
21
|
+
return AdapterContext(
|
|
22
|
+
session_id=self.session_id,
|
|
23
|
+
telemetry=self.telemetry,
|
|
24
|
+
metadata=merged,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class BaseAgentAdapter(ABC):
|
|
29
|
+
@abstractmethod
|
|
30
|
+
def build_events(self, context: AdapterContext) -> Iterable[GenAILitEvent]:
|
|
31
|
+
raise NotImplementedError
|
|
32
|
+
|
|
33
|
+
def run(self, context: AdapterContext) -> tuple[GenAILitEvent, ...]:
|
|
34
|
+
events = tuple(self.build_events(context))
|
|
35
|
+
if context.telemetry is not None:
|
|
36
|
+
context.telemetry.extend(events)
|
|
37
|
+
return events
|
|
38
|
+
|
genailit/events.py
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class GenAILitEvent(BaseModel):
|
|
9
|
+
model_config = ConfigDict(extra="forbid", frozen=True)
|
|
10
|
+
|
|
11
|
+
name: str
|
|
12
|
+
payload: dict[str, Any] = Field(default_factory=dict)
|
|
13
|
+
|
genailit/telemetry.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Iterable
|
|
4
|
+
|
|
5
|
+
from .events import GenAILitEvent
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class TelemetryStore:
|
|
9
|
+
def __init__(self) -> None:
|
|
10
|
+
self._events: list[GenAILitEvent] = []
|
|
11
|
+
|
|
12
|
+
def record(self, event: GenAILitEvent) -> None:
|
|
13
|
+
self._events.append(event)
|
|
14
|
+
|
|
15
|
+
def extend(self, events: Iterable[GenAILitEvent]) -> None:
|
|
16
|
+
self._events.extend(events)
|
|
17
|
+
|
|
18
|
+
def snapshot(self) -> tuple[GenAILitEvent, ...]:
|
|
19
|
+
return tuple(self._events)
|
|
20
|
+
|
|
21
|
+
def clear(self) -> None:
|
|
22
|
+
self._events.clear()
|
|
23
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: genailit
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Open source Python library for multi-agent web interfaces.
|
|
5
|
+
Requires-Python: >=3.10
|
|
6
|
+
Requires-Dist: pydantic>=2
|
|
7
|
+
Provides-Extra: dev
|
|
8
|
+
Requires-Dist: pytest; extra == 'dev'
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
|
|
11
|
+
# GenAILit
|
|
12
|
+
|
|
13
|
+
GenAILit is a small Python base for building web interfaces for multi-agent systems.
|
|
14
|
+
|
|
15
|
+
This milestone only includes the package foundation:
|
|
16
|
+
|
|
17
|
+
- `GenAILitEvent`
|
|
18
|
+
- `TelemetryStore`
|
|
19
|
+
- `AdapterContext`
|
|
20
|
+
- `BaseAgentAdapter`
|
|
21
|
+
|
|
22
|
+
## Requirements
|
|
23
|
+
|
|
24
|
+
- Python 3.10+
|
|
25
|
+
- `pydantic>=2`
|
|
26
|
+
- `pytest` for tests
|
|
27
|
+
|
|
28
|
+
## Install
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pip install genailit
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Example
|
|
35
|
+
|
|
36
|
+
```python
|
|
37
|
+
from genailit import AdapterContext, BaseAgentAdapter, GenAILitEvent, TelemetryStore
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class EchoAdapter(BaseAgentAdapter):
|
|
41
|
+
def build_events(self, context: AdapterContext):
|
|
42
|
+
yield GenAILitEvent(name="ready")
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
telemetry = TelemetryStore()
|
|
46
|
+
context = AdapterContext(session_id="demo", telemetry=telemetry)
|
|
47
|
+
events = EchoAdapter().run(context)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Scope
|
|
51
|
+
|
|
52
|
+
This milestone intentionally does not add LangGraph, React, CLI commands, or FastAPI application code.
|
|
53
|
+
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
genailit/__init__.py,sha256=0cDd9aj0eXEbOGNE6ykqidoKK6cGICnxQ_Sb6AFegeE,255
|
|
2
|
+
genailit/events.py,sha256=UJdWdU2S6PutyLWfYlS8XncP7A2aOCfKCDhCkG2VPpQ,277
|
|
3
|
+
genailit/telemetry.py,sha256=5YU3Sa7QYHNVnlrjtQVSklkhJxJz7jMra9r9vJQ4tEQ,548
|
|
4
|
+
genailit/adapters/__init__.py,sha256=JgQhzeREXjo-Ca7wnm4I6_7YmdVx_l7JTPshw8Dmt2Q,113
|
|
5
|
+
genailit/adapters/base.py,sha256=Cw7F0-_2L54elLiwX8WMIXjVjQgXVw4LMNmsMZ7P7gM,1121
|
|
6
|
+
genailit-0.0.1.dist-info/METADATA,sha256=RJeSE-NyL2VK7iU9WykkpTnbUCiCPS7gAzg2FmymRSA,1108
|
|
7
|
+
genailit-0.0.1.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
|
|
8
|
+
genailit-0.0.1.dist-info/RECORD,,
|