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
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ jobs:
run: uv sync --all-extras

- name: Check formatting with Black
run: uv run black --check decart_sdk/ tests/ examples/
run: uv run black --check decart/ tests/ examples/

- name: Lint with Ruff
run: uv run ruff check decart_sdk/ tests/ examples/
run: uv run ruff check decart/ tests/ examples/

- name: Type check with MyPy
run: uv run mypy decart_sdk/
run: uv run mypy decart/
continue-on-error: true # Don't fail on type errors yet

test:
Expand All @@ -58,7 +58,7 @@ jobs:
run: uv sync --all-extras

- name: Run tests
run: uv run pytest tests/ -v --cov=decart_sdk --cov-report=xml --cov-report=term
run: uv run pytest tests/ -v --cov=decart --cov-report=xml --cov-report=term

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
Expand Down
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ A Python SDK for Decart's models.
### Using UV

```bash
uv pip install decart-sdk
uv pip install decart
```

### Using pip

```bash
pip install decart-sdk
pip install decart
```

## Documentation
Expand All @@ -28,7 +28,7 @@ For complete documentation, guides, and examples, visit:
```python
import asyncio
import os
from decart_sdk import DecartClient, models
from decart import DecartClient, models

async def main():
async with DecartClient(api_key=os.getenv("DECART_API_KEY")) as client:
Expand Down Expand Up @@ -82,13 +82,13 @@ uv sync --all-extras
uv run pytest

# Run linting
uv run ruff check decart_sdk/
uv run ruff check decart/

# Format code
uv run black decart_sdk/ tests/ examples/
uv run black decart/ tests/ examples/

# Type check
uv run mypy decart_sdk/
uv run mypy decart/
```

### Common Commands
Expand All @@ -98,7 +98,7 @@ uv run mypy decart_sdk/
uv sync --all-extras

# Run tests with coverage
uv run pytest --cov=decart_sdk --cov-report=html
uv run pytest --cov=decart --cov-report=html

# Run examples
uv run python examples/process_video.py
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
4 changes: 2 additions & 2 deletions examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ This directory contains example scripts demonstrating how to use the Decart Pyth
1. Install the SDK:

```bash
pip install decart-sdk
pip install decart
```

2. Set your API key:
Expand All @@ -29,7 +29,7 @@ export DECART_API_KEY="your-api-key-here"
First, install the realtime dependencies:

```bash
pip install decart-sdk[realtime]
pip install decart[realtime]
```

- **`realtime_synthetic.py`** - Test realtime API with synthetic colored frames
Expand Down
2 changes: 1 addition & 1 deletion examples/process_image.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import asyncio
import os
from decart_sdk import DecartClient, models
from decart import DecartClient, models


async def main() -> None:
Expand Down
2 changes: 1 addition & 1 deletion examples/process_url.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import asyncio
import os
from decart_sdk import DecartClient, models
from decart import DecartClient, models


async def main() -> None:
Expand Down
2 changes: 1 addition & 1 deletion examples/process_video.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import asyncio
import os
from decart_sdk import DecartClient, models
from decart import DecartClient, models


async def main() -> None:
Expand Down
14 changes: 7 additions & 7 deletions examples/realtime_file.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import asyncio
import os
from pathlib import Path
from decart_sdk import DecartClient, models
from decart import DecartClient, models

try:
from aiortc.contrib.media import MediaPlayer, MediaRecorder
except ImportError:
print("aiortc is required for this example.")
print("Install with: pip install decart-sdk[realtime]")
print("Install with: pip install decart[realtime]")
exit(1)


Expand Down Expand Up @@ -38,10 +38,10 @@ async def main():
return

try:
from decart_sdk.realtime.client import RealtimeClient
from decart.realtime.client import RealtimeClient
except ImportError:
print("Error: Realtime API not available")
print("Install with: pip install decart-sdk[realtime]")
print("Install with: pip install decart[realtime]")
return

print("Creating Decart client...")
Expand Down Expand Up @@ -74,9 +74,9 @@ def on_error(error):

print("\nConnecting to Realtime API...")
try:
from decart_sdk.realtime.client import RealtimeClient
from decart_sdk.realtime.types import RealtimeConnectOptions
from decart_sdk.types import ModelState, Prompt
from decart.realtime.client import RealtimeClient
from decart.realtime.types import RealtimeConnectOptions
from decart.types import ModelState, Prompt

realtime_client = await RealtimeClient.connect(
base_url=client.base_url,
Expand Down
14 changes: 7 additions & 7 deletions examples/realtime_synthetic.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import os
import numpy as np
from pathlib import Path
from decart_sdk import DecartClient, models
from decart import DecartClient, models

logging.basicConfig(
level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
Expand All @@ -15,7 +15,7 @@
from av import VideoFrame
except ImportError:
print("aiortc is required for this example.")
print("Install with: pip install decart-sdk[realtime]")
print("Install with: pip install decart[realtime]")
exit(1)


Expand Down Expand Up @@ -62,10 +62,10 @@ async def main():
return

try:
from decart_sdk.realtime.client import RealtimeClient
from decart.realtime.client import RealtimeClient
except ImportError:
print("Error: Realtime API not available")
print("Install with: pip install decart-sdk[realtime]")
print("Install with: pip install decart[realtime]")
return

print("Creating Decart client...")
Expand Down Expand Up @@ -100,9 +100,9 @@ def on_error(error):

print("\nConnecting to Realtime API...")
try:
from decart_sdk.realtime.client import RealtimeClient
from decart_sdk.realtime.types import RealtimeConnectOptions
from decart_sdk.types import ModelState, Prompt
from decart.realtime.client import RealtimeClient
from decart.realtime.types import RealtimeConnectOptions
from decart.types import ModelState, Prompt

realtime_client = await RealtimeClient.connect(
base_url=client.base_url,
Expand Down
8 changes: 4 additions & 4 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ allow-direct-references = true
core-metadata-version = "2.1"

[project]
name = "decart-sdk"
version = "0.0.1"
name = "decart"
version = "0.0.3"
description = "Decart's Python SDK"
readme = "README.md"
requires-python = ">=3.9"
Expand Down Expand Up @@ -59,11 +59,11 @@ Repository = "https://github.com/decartai/decart-python"
Issues = "https://github.com/decartai/decart-python/issues"

[tool.hatch.build.targets.wheel]
packages = ["decart_sdk"]
packages = ["decart"]
core-metadata-version = "2.1"

[tool.hatch.build.targets.wheel.force-include]
"decart_sdk/py.typed" = "decart_sdk/py.typed"
"decart/py.typed" = "decart/py.typed"

[tool.pytest.ini_options]
asyncio_mode = "auto"
Expand Down
2 changes: 1 addition & 1 deletion tests/test_client.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from decart_sdk import DecartClient, InvalidAPIKeyError, InvalidBaseURLError
from decart import DecartClient, InvalidAPIKeyError, InvalidBaseURLError


def test_create_client_success() -> None:
Expand Down
2 changes: 1 addition & 1 deletion tests/test_models.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from decart_sdk import models, DecartSDKError
from decart import models, DecartSDKError


def test_realtime_models() -> None:
Expand Down
2 changes: 1 addition & 1 deletion tests/test_process.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import pytest
import asyncio
from unittest.mock import AsyncMock, patch, MagicMock
from decart_sdk import DecartClient, models, DecartSDKError
from decart import DecartClient, models, DecartSDKError


@pytest.mark.asyncio
Expand Down
26 changes: 13 additions & 13 deletions tests/test_realtime_unit.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import pytest
from unittest.mock import AsyncMock, MagicMock, patch
from decart_sdk import DecartClient, models
from decart import DecartClient, models

try:
from decart_sdk.realtime.client import RealtimeClient
from decart.realtime.client import RealtimeClient

REALTIME_AVAILABLE = True
except ImportError:
REALTIME_AVAILABLE = False

pytestmark = pytest.mark.skipif(
not REALTIME_AVAILABLE,
reason="Realtime API not available - install with: pip install decart-sdk[realtime]",
reason="Realtime API not available - install with: pip install decart[realtime]",
)


Expand All @@ -38,7 +38,7 @@ async def test_realtime_client_creation_with_mock():
"""Test client creation with mocked WebRTC"""
client = DecartClient(api_key="test-key")

with patch("decart_sdk.realtime.client.WebRTCManager") as mock_manager_class:
with patch("decart.realtime.client.WebRTCManager") as mock_manager_class:
mock_manager = AsyncMock()
mock_manager.connect = AsyncMock(return_value=True)
mock_manager.is_connected = MagicMock(return_value=True)
Expand All @@ -47,8 +47,8 @@ async def test_realtime_client_creation_with_mock():

mock_track = MagicMock()

from decart_sdk.realtime.types import RealtimeConnectOptions
from decart_sdk.types import ModelState, Prompt
from decart.realtime.types import RealtimeConnectOptions
from decart.types import ModelState, Prompt

realtime_client = await RealtimeClient.connect(
base_url=client.base_url,
Expand All @@ -71,15 +71,15 @@ async def test_realtime_set_prompt_with_mock():
"""Test set_prompt with mocked WebRTC"""
client = DecartClient(api_key="test-key")

with patch("decart_sdk.realtime.client.WebRTCManager") as mock_manager_class:
with patch("decart.realtime.client.WebRTCManager") as mock_manager_class:
mock_manager = AsyncMock()
mock_manager.connect = AsyncMock(return_value=True)
mock_manager.send_message = AsyncMock()
mock_manager_class.return_value = mock_manager

mock_track = MagicMock()

from decart_sdk.realtime.types import RealtimeConnectOptions
from decart.realtime.types import RealtimeConnectOptions

realtime_client = await RealtimeClient.connect(
base_url=client.base_url,
Expand All @@ -104,15 +104,15 @@ async def test_realtime_set_mirror_with_mock():
"""Test set_mirror with mocked WebRTC"""
client = DecartClient(api_key="test-key")

with patch("decart_sdk.realtime.client.WebRTCManager") as mock_manager_class:
with patch("decart.realtime.client.WebRTCManager") as mock_manager_class:
mock_manager = AsyncMock()
mock_manager.connect = AsyncMock(return_value=True)
mock_manager.send_message = AsyncMock()
mock_manager_class.return_value = mock_manager

mock_track = MagicMock()

from decart_sdk.realtime.types import RealtimeConnectOptions
from decart.realtime.types import RealtimeConnectOptions

realtime_client = await RealtimeClient.connect(
base_url=client.base_url,
Expand All @@ -137,14 +137,14 @@ async def test_realtime_events():
"""Test event handling"""
client = DecartClient(api_key="test-key")

with patch("decart_sdk.realtime.client.WebRTCManager") as mock_manager_class:
with patch("decart.realtime.client.WebRTCManager") as mock_manager_class:
mock_manager = AsyncMock()
mock_manager.connect = AsyncMock(return_value=True)
mock_manager_class.return_value = mock_manager

mock_track = MagicMock()

from decart_sdk.realtime.types import RealtimeConnectOptions
from decart.realtime.types import RealtimeConnectOptions

realtime_client = await RealtimeClient.connect(
base_url=client.base_url,
Expand All @@ -171,7 +171,7 @@ def on_error(error):
realtime_client._emit_connection_change("connected")
assert connection_states == ["connected"]

from decart_sdk.errors import DecartSDKError
from decart.errors import DecartSDKError

test_error = DecartSDKError("Test error")
realtime_client._emit_error(test_error)
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading