Skip to content
Open
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
21 changes: 21 additions & 0 deletions chatkit/_compat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from __future__ import annotations

try:
from enum import StrEnum
except ImportError: # Python < 3.11
from enum import Enum

class StrEnum(str, Enum):
"""Minimal StrEnum compatibility for Python < 3.11."""


try:
from typing import assert_never
except ImportError: # Python < 3.11
from typing import NoReturn

def assert_never(arg: NoReturn) -> NoReturn:
raise AssertionError(f"Expected code path to be unreachable, got: {arg!r}")


__all__ = ("StrEnum", "assert_never")
2 changes: 1 addition & 1 deletion chatkit/agents.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
Generic,
Sequence,
TypeVar,
assert_never,
cast,
)

Expand Down Expand Up @@ -39,6 +38,7 @@
)
from pydantic import BaseModel, ConfigDict, SkipValidation, TypeAdapter

from ._compat import assert_never
from .server import stream_widget
from .store import Store, StoreItemType
from .types import (
Expand Down
3 changes: 2 additions & 1 deletion chatkit/errors.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from abc import ABC
from enum import StrEnum

from ._compat import StrEnum


# Not a closed enum, new error codes can and will be added as needed
Expand Down
10 changes: 2 additions & 8 deletions chatkit/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,7 @@
from collections.abc import AsyncIterator
from contextlib import contextmanager
from datetime import datetime
from typing import (
Any,
AsyncGenerator,
AsyncIterable,
Callable,
Generic,
assert_never,
)
from typing import Any, AsyncGenerator, AsyncIterable, Callable, Generic

import agents
from agents.models.chatcmpl_helpers import (
Expand All @@ -24,6 +17,7 @@

from chatkit.errors import CustomStreamError, StreamError

from ._compat import assert_never
from .logger import logger
from .store import AttachmentStore, Store, StoreItemType, default_generate_id
from .types import (
Expand Down
3 changes: 2 additions & 1 deletion tests/helpers/mock_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@
import re
import uuid
from datetime import datetime, timedelta
from typing import Annotated, Any, AsyncIterator, Callable, Literal, assert_never
from typing import Annotated, Any, AsyncIterator, Callable, Literal

from agents import Agent, Runner
from anyio import sleep
from pydantic import BaseModel, Field, TypeAdapter

from chatkit._compat import assert_never
from chatkit.actions import Action, ActionConfig
from chatkit.types import ThreadStreamEvent
from chatkit.widgets import (
Expand Down