👋 Welcome! We're excited that you're interested in contributing to Julep. This guide will help you get started.
- Fork the repository
- Create a new branch for your changes
- Make your changes and test them
- Submit a pull request
Found a bug? Have a feature request? Submit an issue with:
- Steps to reproduce
- Expected behavior
- Actual behavior
- Screenshots (if applicable)
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature-name
- Make your changes
- Write/update tests
- Push to your fork
- Open a pull request
💡 Tip: Make sure your code follows our style guide and passes all tests.
Service | Description |
---|---|
agents-api |
Core API service |
typespec |
API specifications |
blob-store |
File storage service |
cli |
Command-line interface |
embedding-service |
Text embedding management |
llm-proxy |
Language model proxy |
gateway |
API gateway & routing |
monitoring |
System metrics & monitoring |
integrations-service
: External integrationsmemory-store
: Persistent storagescheduler
: Task schedulingdeploy
: Deployment configsdocumentation
: Project docsscripts
: Utility scriptscookbooks
: Usage examples
- FastAPI: Web framework for building APIs
- TypeSpec: API specification language
- Timescale: Database system
- SeadweedFS: Blob storage system
- Grafana: Monitoring and observability platform
- Prometheus: Monitoring and observability platform
- LiteLLM: LLM framework
- Temporal: Workflow engine
- Docker: Containerization
To understand the relationships between the components, please refer to the System Architecture section.
To get a comprehensive understanding of Julep, we recommend exploring the codebase in the following order:
-
Project Overview
- Read
README.md
in the root directory - Explore
docs/
for detailed documentation
- Read
-
System Architecture
- Examine
docker-compose.yml
in the root directory - Review
deploy/
directory for different deployment configurations
- Examine
-
API Specifications
- Learn about TypeSpec: https://typespec.io/docs/
- Explore
typespec/
directory:- Start with
common/
folder - Review
main.tsp
- Examine each module sequentially
- Start with
-
Core API Implementation
- Learn about FastAPI: https://fastapi.tiangolo.com/
- Explore
agents-api/
directory:- Review
README.md
for an overview - Examine
routers/
for API endpoints - Look into
models/
for data models
- Review
-
Database and Storage
- Learn about Cozo: https://docs.cozodb.org/en/latest/tutorial.html
- Review
agents-api/README.md
for database schema - Explore
agents-api/models/
for database queries
-
Workflow Management
- Learn about Temporal: https://docs.temporal.io/develop/python
- Explore
agents-api/activities/
for individual workflow steps - Review
agents-api/workflows/task_execution/
for main workflow logic
-
Testing
- Examine
agents-api/tests/
for test cases
- Examine
-
Additional Services
- Explore other service directories (
integrations-service/
,embedding-service/
, etc.) to understand their specific roles and implementations
- Explore other service directories (
-
Set Up Development Environment
- Clone the repository
- Install Docker and Docker Compose
- Set up necessary API keys and environment variables
You can check our Local Setup section in the docs for more information.
-
Choose an Area to Contribute
- Check the issue tracker for open issues
- Look for "good first issue" labels for newcomers
-
Make Changes
- Create a new branch for your changes
- Write clean, well-documented code
- Ensure your changes adhere to the project's coding standards
-
Test Your Changes
- Run existing tests
- Add new tests for new functionality
- Ensure all tests pass before submitting your changes
-
Submit a Pull Request
- Provide a clear description of your changes
- Reference any related issues
- Be prepared to respond to feedback and make adjustments
-
Code Review
- Address any comments or suggestions from reviewers
- Make necessary changes and push updates to your branch
-
Merge
- Once approved, your changes will be merged into the main branch
The integration service is a crucial part of Julep, and we welcome contributions from the community to enhance its functionality and capabilities.
To contribute to the integration service, you can follow these steps:
-
Add a new integration provider to our TypeSpec: You can do so by:
-
Adding the provider name to the
integrationProvider
alias intypespec/tools/models.tsp
-
Adding a new file in
typespec/tools/
with the provider name. Take a look at the other integration files in thetypespec/tools/
directory for examples.If the integration needs an API key or other form of authentication, you would have to add a
Setup
model to the integration definition file, where you would define the authentication parameters (spider.tsp
is an example of this). Otherwise, you can omit theSetup
model (wikipedia.tsp
is an example of this).
-
-
Generate the new OpenAPI schema and Pydantic models: You need to
cd
into the root directory of the project and run./scripts/generate_openapi_code.sh
to generate the new OpenAPI schema along with Pydantic models for the new changes.The new OpenAPI schema will be generated in
./openapi.yaml
and the Pydantic models will be generated in./integrations-service/integrations/autogen
. -
Add the new integration logic in the integration service: You need to add the new integration logic in the integration service by adding a new file in
integration-service/integrations/utils/integrations
with the provider name. Take a look at the other integration files in the same directory for examples. -
Add the new integration provider to the providers registry: You need to add the new integration provider to the providers registry by adding a new entry to the
available_providers
dictionary inintegrations-service/integrations/providers.py
.
Improvements to documentation are always appreciated! If you see areas that could be clarified or expanded, feel free to make the changes and submit a pull request.
We'd love to hear your feedback and ideas for the project! Feel free to submit an issue or contact the maintainers directly to share your thoughts. Your input is very valuable in shaping the future direction of the project.
Remember, contributions aren't limited to code. Documentation improvements, bug reports, and feature suggestions are also valuable contributions to the project.