zep-livekit 0.1.0__tar.gz
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.
- zep_livekit-0.1.0/.gitignore +91 -0
- zep_livekit-0.1.0/CHANGELOG.md +62 -0
- zep_livekit-0.1.0/CLAUDE.md +191 -0
- zep_livekit-0.1.0/Makefile +91 -0
- zep_livekit-0.1.0/PKG-INFO +330 -0
- zep_livekit-0.1.0/README.md +309 -0
- zep_livekit-0.1.0/examples/graph_voice_assistant.py +115 -0
- zep_livekit-0.1.0/examples/voice_assistant.py +107 -0
- zep_livekit-0.1.0/pyproject.toml +87 -0
- zep_livekit-0.1.0/src/zep_livekit/__init__.py +11 -0
- zep_livekit-0.1.0/src/zep_livekit/agent.py +432 -0
- zep_livekit-0.1.0/src/zep_livekit/exceptions.py +15 -0
- zep_livekit-0.1.0/tests/__init__.py +1 -0
- zep_livekit-0.1.0/tests/test_basic.py +49 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# If you prefer the allow list template instead of the deny list, see community template:
|
|
2
|
+
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
|
|
3
|
+
#
|
|
4
|
+
# Binaries for programs and plugins
|
|
5
|
+
out/
|
|
6
|
+
*.exe
|
|
7
|
+
*.exe~
|
|
8
|
+
*.dll
|
|
9
|
+
*.so
|
|
10
|
+
*.dylib
|
|
11
|
+
|
|
12
|
+
# Secrets
|
|
13
|
+
.env
|
|
14
|
+
.env.local
|
|
15
|
+
|
|
16
|
+
# Test data
|
|
17
|
+
test_data
|
|
18
|
+
|
|
19
|
+
# Test binary, built with `go test -c`
|
|
20
|
+
*.test
|
|
21
|
+
|
|
22
|
+
# Output of the go coverage tool, specifically when used with LiteIDE
|
|
23
|
+
*.out
|
|
24
|
+
|
|
25
|
+
# Dependency directories (remove the comment below to include it)
|
|
26
|
+
# vendor/
|
|
27
|
+
|
|
28
|
+
# Go workspace file
|
|
29
|
+
.idea
|
|
30
|
+
.vscode
|
|
31
|
+
|
|
32
|
+
# VSCode local history
|
|
33
|
+
.history
|
|
34
|
+
|
|
35
|
+
# Python
|
|
36
|
+
__pycache__/
|
|
37
|
+
*.py[cod]
|
|
38
|
+
*$py.class
|
|
39
|
+
*.so
|
|
40
|
+
.Python
|
|
41
|
+
build/
|
|
42
|
+
develop-eggs/
|
|
43
|
+
dist/
|
|
44
|
+
downloads/
|
|
45
|
+
eggs/
|
|
46
|
+
.eggs/
|
|
47
|
+
lib/**/*.py
|
|
48
|
+
lib/**/*.pyc
|
|
49
|
+
lib/**/__pycache__/
|
|
50
|
+
lib/**/site-packages/
|
|
51
|
+
lib64/
|
|
52
|
+
parts/
|
|
53
|
+
sdist/
|
|
54
|
+
var/
|
|
55
|
+
wheels/
|
|
56
|
+
share/python-wheels/
|
|
57
|
+
*.egg-info/
|
|
58
|
+
.installed.cfg
|
|
59
|
+
*.egg
|
|
60
|
+
MANIFEST
|
|
61
|
+
|
|
62
|
+
# Virtual environments
|
|
63
|
+
venv/
|
|
64
|
+
env/
|
|
65
|
+
ENV/
|
|
66
|
+
env.bak/
|
|
67
|
+
venv.bak/
|
|
68
|
+
.venv/
|
|
69
|
+
|
|
70
|
+
# PyCharm
|
|
71
|
+
.idea/
|
|
72
|
+
|
|
73
|
+
# Jupyter Notebook
|
|
74
|
+
.ipynb_checkpoints
|
|
75
|
+
|
|
76
|
+
# pyenv
|
|
77
|
+
.python-version
|
|
78
|
+
|
|
79
|
+
# pytest
|
|
80
|
+
.pytest_cache/
|
|
81
|
+
.coverage
|
|
82
|
+
|
|
83
|
+
# mypy
|
|
84
|
+
.mypy_cache/
|
|
85
|
+
.dmypy.json
|
|
86
|
+
dmypy.json
|
|
87
|
+
|
|
88
|
+
# UV (Python package manager)
|
|
89
|
+
uv.lock
|
|
90
|
+
.uv_cache/
|
|
91
|
+
__pypackages__/
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the zep-livekit integration will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.1.0] - 2025-01-27
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- Initial release of Zep LiveKit integration
|
|
14
|
+
- **Dual Agent Architecture**:
|
|
15
|
+
- `ZepUserAgent`: Thread-based conversational memory for user sessions
|
|
16
|
+
- `ZepGraphAgent`: Knowledge graph-based memory for shared knowledge across sessions
|
|
17
|
+
- **Event-Driven Architecture**: Automatic conversation capture using LiveKit's conversation events
|
|
18
|
+
- **Message Attribution**: Optional user and assistant message naming for better conversation tracking
|
|
19
|
+
- **Hybrid Memory Retrieval**: Graph agent supports parallel search across facts, entities, and episodes
|
|
20
|
+
- **User Prefixing**: Graph agent supports optional user name prefixing for multi-user attribution
|
|
21
|
+
|
|
22
|
+
### Core Features
|
|
23
|
+
- **Thread Memory**: Persistent conversation history in Zep threads with context modes (basic/summary)
|
|
24
|
+
- **Knowledge Graph**: Shared knowledge storage across conversations with smart context composition
|
|
25
|
+
- **Memory Injection**: Automatic context retrieval and injection into LiveKit agent conversations
|
|
26
|
+
- **Message Deduplication**: Prevents duplicate message storage using content hashing and IDs
|
|
27
|
+
- **Error Handling**: Comprehensive exception handling with graceful degradation
|
|
28
|
+
- **Type Safety**: Full type annotations and MyPy compatibility throughout
|
|
29
|
+
|
|
30
|
+
### Integration Capabilities
|
|
31
|
+
- **LiveKit Compatibility**: Drop-in replacement for standard LiveKit Agent
|
|
32
|
+
- **Flexible Constructor**: Dynamic `**kwargs` support for all LiveKit Agent parameters
|
|
33
|
+
- **Tool Integration**: Function tools that can be mixed into any LiveKit agent
|
|
34
|
+
- **OpenAI Integration**: Seamless compatibility with LiveKit's OpenAI plugins
|
|
35
|
+
- **Production Ready**: Async/await throughout, proper logging, minimal overhead
|
|
36
|
+
|
|
37
|
+
### Examples & Documentation
|
|
38
|
+
- **Voice Assistant Example**: Complete thread-based memory agent (`voice_assistant.py`)
|
|
39
|
+
- **Knowledge Assistant Example**: Graph-based memory agent (`graph_voice_assistant.py`)
|
|
40
|
+
- **Tools Examples**: Standalone memory tools integration examples
|
|
41
|
+
- **Deployment Guide**: FastAPI and production deployment patterns
|
|
42
|
+
- **Comprehensive Documentation**: API reference, usage patterns, and best practices
|
|
43
|
+
|
|
44
|
+
### Development Infrastructure
|
|
45
|
+
- **Quality Assurance**: Ruff formatting, MyPy type checking, comprehensive linting
|
|
46
|
+
- **Clean Architecture**: Separation of concerns between storage and retrieval
|
|
47
|
+
- **Makefile Workflows**: `make pre-commit`, `make ci` for development consistency
|
|
48
|
+
- **No-Test Mode**: Graceful handling of projects without test files
|
|
49
|
+
|
|
50
|
+
### Dependencies
|
|
51
|
+
- `livekit-agents>=0.8.0` - LiveKit agents framework
|
|
52
|
+
- `zep-cloud>=3.4.3` - Zep Cloud client library
|
|
53
|
+
- `typing-extensions>=4.0.0` - Type hints compatibility
|
|
54
|
+
|
|
55
|
+
### Architecture Decisions
|
|
56
|
+
- **Event-Driven Storage**: Uses LiveKit's `conversation_item_added` events for real-time capture
|
|
57
|
+
- **Dual Memory Strategy**: Thread memory for conversations, graph memory for knowledge
|
|
58
|
+
- **Per-User Agent Instances**: Designed for typical deployment where each user gets their own agent
|
|
59
|
+
- **Minimal Logging**: Clean, production-ready logging with essential information only
|
|
60
|
+
|
|
61
|
+
[Unreleased]: https://github.com/getzep/zep/compare/zep-livekit-v0.1.0...HEAD
|
|
62
|
+
[0.1.0]: https://github.com/getzep/zep/releases/tag/zep-livekit-v0.1.0
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# Claude's Guide to Zep-LiveKit Integration Development
|
|
2
|
+
|
|
3
|
+
This document captures the complete development journey, architecture, and implementation details for the Zep-LiveKit integration project.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
**Goal**: Create a comprehensive Zep memory integration for LiveKit agents that provides persistent memory capabilities for voice AI applications.
|
|
8
|
+
|
|
9
|
+
**Repository**: `/Users/paulpaliychuk/job/zep/integrations/python/zep_livekit/`
|
|
10
|
+
|
|
11
|
+
**Key Achievement**: Successfully built a production-ready, dual-architecture memory system that provides both conversational memory and knowledge graph capabilities for LiveKit voice agents.
|
|
12
|
+
|
|
13
|
+
## What We Built
|
|
14
|
+
|
|
15
|
+
### 1. Dual Agent Architecture
|
|
16
|
+
|
|
17
|
+
**Two Specialized Agent Classes:**
|
|
18
|
+
|
|
19
|
+
- **`ZepUserAgent`** (`agent.py`): Thread-based conversational memory
|
|
20
|
+
- Extends LiveKit's `Agent` class
|
|
21
|
+
- Stores conversations in Zep threads using `thread.add_messages()`
|
|
22
|
+
- Retrieves context using `thread.get_user_context()`
|
|
23
|
+
- Perfect for personal assistant scenarios with conversation history
|
|
24
|
+
- Supports context modes: "basic" or "summary"
|
|
25
|
+
- Optional message naming for user and assistant attribution
|
|
26
|
+
|
|
27
|
+
- **`ZepGraphAgent`** (`agent.py`): Knowledge graph-based memory
|
|
28
|
+
- Extends LiveKit's `Agent` class
|
|
29
|
+
- Stores information in Zep knowledge graphs using `graph.add()`
|
|
30
|
+
- Performs hybrid search across facts, entities, and episodes
|
|
31
|
+
- Uses `compose_context_string()` for smart context composition
|
|
32
|
+
- Perfect for shared knowledge scenarios across multiple users
|
|
33
|
+
- Optional user name prefixing for message attribution
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### 2. Key Features Implemented
|
|
37
|
+
|
|
38
|
+
**Event-Driven Architecture:**
|
|
39
|
+
- Uses LiveKit's `conversation_item_added` events for real-time capture
|
|
40
|
+
- Automatic conversation capture without manual intervention
|
|
41
|
+
- Message deduplication using content hashing and message IDs
|
|
42
|
+
- Proper role-based message categorization (user/assistant)
|
|
43
|
+
|
|
44
|
+
**Memory Storage:**
|
|
45
|
+
- Thread-based conversation history storage in `ZepUserAgent`
|
|
46
|
+
- Knowledge graph storage in `ZepGraphAgent` with user attribution
|
|
47
|
+
- Message attribution with optional user/assistant names
|
|
48
|
+
- Error handling with graceful degradation
|
|
49
|
+
|
|
50
|
+
**Memory Retrieval:**
|
|
51
|
+
- Context-aware memory injection in `on_user_turn_completed`
|
|
52
|
+
- Thread context retrieval for conversational memory
|
|
53
|
+
- Parallel graph search (edges, nodes, episodes) for knowledge memory
|
|
54
|
+
- Smart context composition using Zep's utility functions
|
|
55
|
+
|
|
56
|
+
**LiveKit Integration:**
|
|
57
|
+
- Full compatibility with LiveKit Agent ecosystem
|
|
58
|
+
- Support for all Agent parameters (STT, LLM, TTS, VAD, tools, etc.)
|
|
59
|
+
- Dynamic constructor with `**kwargs: Any` for future-proofing
|
|
60
|
+
- Drop-in replacement for standard LiveKit agents
|
|
61
|
+
|
|
62
|
+
## Development Journey & Problem Solving
|
|
63
|
+
|
|
64
|
+
### Initial Challenge: Memory Integration Pattern
|
|
65
|
+
- **Problem**: How to integrate persistent memory with LiveKit's real-time voice framework
|
|
66
|
+
- **Solution**: Event-driven architecture using LiveKit's conversation events
|
|
67
|
+
- **Result**: Seamless integration that captures conversations automatically
|
|
68
|
+
|
|
69
|
+
### Architecture Evolution
|
|
70
|
+
- **First Approach**: Single agent class with mixed responsibilities
|
|
71
|
+
- **Issue**: Complex codebase with unclear separation of concerns
|
|
72
|
+
- **Final Solution**: Dual agent architecture + standalone tools
|
|
73
|
+
- **Benefits**: Clear separation, flexible usage patterns, maintainable code
|
|
74
|
+
|
|
75
|
+
### Message Attribution Requirements
|
|
76
|
+
- **Need**: Better tracking of who said what in conversations
|
|
77
|
+
- **Implementation**: Optional message naming parameters
|
|
78
|
+
- **Result**: `user_message_name` and `assistant_message_name` parameters in `ZepUserAgent`
|
|
79
|
+
|
|
80
|
+
### Multi-User Considerations
|
|
81
|
+
- **Research**: Investigated LiveKit's multi-user capabilities
|
|
82
|
+
- **Finding**: Agents are typically instantiated per-user, not as shared instances
|
|
83
|
+
- **Solution**: Simple user name prefixing in `ZepGraphAgent` for attribution
|
|
84
|
+
- **Deployment Pattern**: Per-user agent instances in production environments
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
## Current Implementation Status
|
|
88
|
+
|
|
89
|
+
### ✅ Completed Features
|
|
90
|
+
1. **Dual agent architecture** - Thread-based and graph-based memory
|
|
91
|
+
2. **Event-driven conversation capture** - Real-time message storage
|
|
92
|
+
3. **Memory context injection** - Automatic context retrieval and injection
|
|
93
|
+
4. **LiveKit compatibility** - Full Agent ecosystem integration
|
|
94
|
+
5. **Message deduplication** - Prevents duplicate storage
|
|
95
|
+
6. **Error handling & logging** - Production-ready reliability
|
|
96
|
+
7. **Type safety** - Full typing support with proper inheritance
|
|
97
|
+
8. **Message attribution** - Optional naming for better conversation tracking
|
|
98
|
+
9. **Clean architecture** - Separation between storage and retrieval concerns
|
|
99
|
+
|
|
100
|
+
### 🏗️ Architecture Patterns
|
|
101
|
+
|
|
102
|
+
**Thread Memory Pattern (ZepUserAgent):**
|
|
103
|
+
```python
|
|
104
|
+
# Storage
|
|
105
|
+
zep_message = Message(content=user_text.strip(), role="user", name=self._user_message_name)
|
|
106
|
+
await self._zep_client.thread.add_messages(thread_id=self._thread_id, messages=[zep_message])
|
|
107
|
+
|
|
108
|
+
# Retrieval
|
|
109
|
+
memory_result = await self._zep_client.thread.get_user_context(
|
|
110
|
+
thread_id=self._thread_id, mode=self._context_mode
|
|
111
|
+
)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**Knowledge Graph Pattern (ZepGraphAgent):**
|
|
115
|
+
```python
|
|
116
|
+
# Storage with user attribution
|
|
117
|
+
if self._user_name:
|
|
118
|
+
message_data = f"[{self._user_name}]: {user_text}"
|
|
119
|
+
await self._zep_client.graph.add(graph_id=self._graph_id, type="message", data=message_data)
|
|
120
|
+
|
|
121
|
+
# Hybrid retrieval
|
|
122
|
+
results = await asyncio.gather(
|
|
123
|
+
graph.search(scope="edges", limit=facts_limit),
|
|
124
|
+
graph.search(scope="nodes", limit=entity_limit),
|
|
125
|
+
graph.search(scope="episodes", limit=episode_limit)
|
|
126
|
+
)
|
|
127
|
+
context = compose_context_string(edges, nodes, episodes)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
## File Structure & Key Components
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
zep_livekit/
|
|
135
|
+
├── src/zep_livekit/
|
|
136
|
+
│ ├── __init__.py # Exports ZepUserAgent, ZepGraphAgent
|
|
137
|
+
│ ├── agent.py # Dual agent classes (424 lines)
|
|
138
|
+
│ └── exceptions.py # Custom exception classes
|
|
139
|
+
├── examples/
|
|
140
|
+
│ ├── voice_assistant.py # ZepUserAgent example with thread memory
|
|
141
|
+
│ └── graph_voice_assistant.py # ZepGraphAgent example with graph memory
|
|
142
|
+
├── README.md # Comprehensive usage documentation
|
|
143
|
+
├── CHANGELOG.md # Detailed version history
|
|
144
|
+
├── pyproject.toml # Package configuration
|
|
145
|
+
└── Makefile # Development workflow commands
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Production Deployment Patterns
|
|
149
|
+
|
|
150
|
+
### FastAPI Integration Pattern
|
|
151
|
+
```python
|
|
152
|
+
# FastAPI creates room and tokens
|
|
153
|
+
@app.post("/create-room/{user_id}")
|
|
154
|
+
async def create_voice_session(user_id: str, user_name: str):
|
|
155
|
+
# Generate access token and room for user
|
|
156
|
+
|
|
157
|
+
# Separate agent worker process
|
|
158
|
+
async def entrypoint(ctx: agents.JobContext):
|
|
159
|
+
# Per-user agent instantiation
|
|
160
|
+
user_id = extract_from_room_context(ctx)
|
|
161
|
+
agent = ZepUserAgent(zep_client=zep_client, user_id=user_id, ...)
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Deployment Environments
|
|
165
|
+
- **LiveKit Cloud**: Managed deployment with `livekit-cli deploy`
|
|
166
|
+
- **Self-Hosted**: Docker containers with Kubernetes scaling
|
|
167
|
+
- **Hybrid**: FastAPI web layer + LiveKit agent workers
|
|
168
|
+
|
|
169
|
+
## Quality Standards Achieved
|
|
170
|
+
|
|
171
|
+
✅ **Code Quality**: All linting (ruff), type checking (MyPy), and formatting passing
|
|
172
|
+
✅ **Architecture**: Clean separation of concerns with dual approach
|
|
173
|
+
✅ **Reliability**: Comprehensive error handling and graceful degradation
|
|
174
|
+
✅ **Maintainability**: Well-documented, typed, and structured codebase
|
|
175
|
+
✅ **Compatibility**: Full LiveKit Agent ecosystem integration
|
|
176
|
+
✅ **Flexibility**: Both wrapper agents and standalone tools available
|
|
177
|
+
✅ **Performance**: Event-driven, non-blocking operations throughout
|
|
178
|
+
|
|
179
|
+
## Success Metrics
|
|
180
|
+
|
|
181
|
+
The Zep-LiveKit integration successfully provides:
|
|
182
|
+
- **Two complementary memory approaches** for different use cases
|
|
183
|
+
- **Production-ready reliability** with comprehensive error handling
|
|
184
|
+
- **Full LiveKit compatibility** as drop-in Agent replacements
|
|
185
|
+
- **Type safety and maintainability** with comprehensive type annotations
|
|
186
|
+
- **Clean architecture** with clear separation of concerns
|
|
187
|
+
- **Easy deployment** following standard LiveKit patterns
|
|
188
|
+
|
|
189
|
+
## Ready for Production
|
|
190
|
+
|
|
191
|
+
The integration is **production-ready** with comprehensive documentation, examples, error handling, and follows industry best practices for both LiveKit agents and Zep memory integration.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Zep LiveKit Integration Development Makefile
|
|
2
|
+
|
|
3
|
+
.PHONY: help install format lint type-check test all pre-commit ci clean
|
|
4
|
+
|
|
5
|
+
# Default target
|
|
6
|
+
help:
|
|
7
|
+
@echo "Zep LiveKit Integration Development Commands:"
|
|
8
|
+
@echo ""
|
|
9
|
+
@echo "Setup:"
|
|
10
|
+
@echo " make install Install dependencies for development"
|
|
11
|
+
@echo ""
|
|
12
|
+
@echo "Development:"
|
|
13
|
+
@echo " make format Format code with ruff"
|
|
14
|
+
@echo " make lint Run linting checks"
|
|
15
|
+
@echo " make type-check Run MyPy type checking"
|
|
16
|
+
@echo " make test Run test suite"
|
|
17
|
+
@echo ""
|
|
18
|
+
@echo "Workflows:"
|
|
19
|
+
@echo " make pre-commit Run pre-commit checks with auto-fixes"
|
|
20
|
+
@echo " make ci Run strict CI-style checks"
|
|
21
|
+
@echo " make all Run full development workflow"
|
|
22
|
+
@echo ""
|
|
23
|
+
@echo "Cleanup:"
|
|
24
|
+
@echo " make clean Clean up build artifacts"
|
|
25
|
+
|
|
26
|
+
# Install dependencies
|
|
27
|
+
install:
|
|
28
|
+
@echo "Installing dependencies..."
|
|
29
|
+
pip install -e .[dev]
|
|
30
|
+
|
|
31
|
+
# Format code
|
|
32
|
+
format:
|
|
33
|
+
@echo "Formatting code with ruff..."
|
|
34
|
+
ruff format src/ tests/ examples/
|
|
35
|
+
ruff check --fix src/ tests/ examples/
|
|
36
|
+
|
|
37
|
+
# Lint code
|
|
38
|
+
lint:
|
|
39
|
+
@echo "Running linting checks..."
|
|
40
|
+
ruff check src/ tests/ examples/
|
|
41
|
+
|
|
42
|
+
# Type checking
|
|
43
|
+
type-check:
|
|
44
|
+
@echo "Running MyPy type checking..."
|
|
45
|
+
mypy src/zep_livekit/
|
|
46
|
+
|
|
47
|
+
# Run tests
|
|
48
|
+
test:
|
|
49
|
+
@echo "Running test suite..."
|
|
50
|
+
@if [ -d tests/ ] && [ "$$(find tests/ -name '*.py' -type f | wc -l)" -gt 0 ]; then \
|
|
51
|
+
pytest tests/ -v; \
|
|
52
|
+
else \
|
|
53
|
+
echo "No tests found, skipping test execution."; \
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
# Pre-commit workflow (with auto-fixes)
|
|
57
|
+
pre-commit: format lint type-check test
|
|
58
|
+
@echo "✅ Pre-commit checks completed successfully!"
|
|
59
|
+
|
|
60
|
+
# CI workflow (strict, no auto-fixes)
|
|
61
|
+
ci:
|
|
62
|
+
@echo "Running CI checks..."
|
|
63
|
+
@echo "Checking code formatting..."
|
|
64
|
+
ruff format --check src/ tests/ examples/
|
|
65
|
+
@echo "Running linting..."
|
|
66
|
+
ruff check src/ tests/ examples/
|
|
67
|
+
@echo "Running type checking..."
|
|
68
|
+
mypy src/zep_livekit/
|
|
69
|
+
@echo "Running tests..."
|
|
70
|
+
@if [ -d tests/ ] && [ "$$(find tests/ -name '*.py' -type f | wc -l)" -gt 0 ]; then \
|
|
71
|
+
pytest tests/ -v --cov=src/zep_livekit --cov-report=term-missing; \
|
|
72
|
+
else \
|
|
73
|
+
echo "No tests found, skipping test execution."; \
|
|
74
|
+
fi
|
|
75
|
+
@echo "✅ All CI checks passed!"
|
|
76
|
+
|
|
77
|
+
# Full development workflow
|
|
78
|
+
all: install pre-commit
|
|
79
|
+
@echo "✅ Full development workflow completed!"
|
|
80
|
+
|
|
81
|
+
# Clean up
|
|
82
|
+
clean:
|
|
83
|
+
@echo "Cleaning up build artifacts..."
|
|
84
|
+
rm -rf build/
|
|
85
|
+
rm -rf dist/
|
|
86
|
+
rm -rf *.egg-info/
|
|
87
|
+
rm -rf .pytest_cache/
|
|
88
|
+
rm -rf .mypy_cache/
|
|
89
|
+
rm -rf .ruff_cache/
|
|
90
|
+
find . -type d -name __pycache__ -exec rm -rf {} +
|
|
91
|
+
find . -type f -name "*.pyc" -delete
|