Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fangyinc/lyric
Lyric: A Rust-powered secure runtime for AI-Agent.
https://github.com/fangyinc/lyric
Last synced: 1 day ago
JSON representation
Lyric: A Rust-powered secure runtime for AI-Agent.
- Host: GitHub
- URL: https://github.com/fangyinc/lyric
- Owner: fangyinc
- License: mit
- Created: 2024-10-04T05:03:08.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2024-11-10T22:56:02.000Z (9 days ago)
- Last Synced: 2024-11-10T23:32:10.621Z (9 days ago)
- Language: Rust
- Homepage:
- Size: 574 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Lyric
A Rust-powered secure sandbox for multi-language code execution, leveraging WebAssembly to provide high-performance runtime isolation for AI applications.
## ✨ Features
- 🛡️ **Secure Isolation**: Sandboxed environment based on WebAssembly for reliable runtime isolation
- 🚀 **High Performance**: Built with Rust to ensure optimal execution performance
- 🌐 **Multi-language Support**: Run Python, JavaScript, and more in a unified environment
- 🔌 **Easy Integration**: Clean Python bindings for seamless integration with existing projects
- 🎯 **AI-Optimized**: Runtime environment specifically optimized for AI applications## 🔧 Requirements
- Python >= 3.8
## 🚀 Quick Start
### Installation
**Install Lyric via pip:**
```bash
pip install "lyric-py>=0.1.4"
```**Install default Python webassembly worker:**
```bash
pip install "lyric-py-worker>=0.1.4"
```**Install default JavaScript webassembly worker:**
```bash
pip install "lyric-js-worker>=0.1.4"
```### Basic Usage
```python
import asyncio
from lyric import DefaultLyricDriverpython_code = """
def add(a, b):
return a + b
result = add(1, 2)
print(result)
"""js_code = """
console.log('Hello from JavaScript!');
"""async def main():
lcd = DefaultLyricDriver(host="localhost", log_level="ERROR")
lcd.start()# Load workers(default: Python, JavaScript)
await lcd.lyric.load_default_workers()# Execute Python code
py_res = await lcd.exec(python_code, "python")
print(py_res)# Execute JavaScript code
js_res = await lcd.exec(js_code, "javascript")
print(js_res)# Stop the driver
lcd.stop()asyncio.run(main())
```### Function Execution
```python
import asyncio
import json
from lyric import DefaultLyricDriverpy_func = """
def message_handler(message_dict):
user_message = message_dict.get("user_message")
ai_message = message_dict.get("ai_message")
return {
"user": user_message,
"ai": ai_message,
"all": [user_message, ai_message],
"custom": "custom",
"handler_language": "python",
}
"""js_func = """
function message_handler(message_dict) {
return {
user: message_dict.user_message,
ai: message_dict.ai_message,
all: [message_dict.user_message, message_dict.ai_message],
custom: "custom",
handler_language: "javascript",
};
}
"""
async def main():
lcd = DefaultLyricDriver(host="localhost", log_level="ERROR")
lcd.start()# Load workers(default: Python, JavaScript)
await lcd.lyric.load_default_workers()input_data = {
"user_message": "Hello from user",
"ai_message": "Hello from AI",
}
input_bytes = json.dumps(input_data).encode("utf-8")
py_res = await lcd.exec1(py_func, input_bytes, "message_handler", lang="python")
# Get the result of the function execution
result_dict = py_res.output
print("Python result:", result_dict)
print(f"Full output: {py_res}")js_res = await lcd.exec1(js_func, input_bytes, "message_handler", lang="javascript")
# Get the result of the function execution
result_dict = js_res.output
print("JavaScript result:", result_dict)
print(f"Full output: {js_res}")# Stop the driver
lcd.stop()asyncio.run(main())
```## Advanced Usage
### Execution With Specific Resources
```python
import asyncio
from lyric import DefaultLyricDriver, PyTaskResourceConfig, PyTaskFsConfig, PyTaskMemoryConfiglcd = DefaultLyricDriver(host="localhost", log_level="ERROR")
lcd.start()python_code = """
import os# List the files in the root directory
root = os.listdir('/tmp/')
print("Files in the root directory:", root)# Create a new file in the home directory
with open('/home/new_file.txt', 'w') as f:
f.write('Hello, World!')
"""async def main():
# Load workers(default: Python, JavaScript)
await lcd.lyric.load_default_workers()
dir_read, dir_write = 1, 2
file_read, file_write = 3, 4
resources = PyTaskResourceConfig(
fs=PyTaskFsConfig(
preopens=[
# Mount current directory in host to "/tmp" in the sandbox with read permission
(".", "/tmp", dir_read, file_read),
# Mount "/tmp" in host to "/home" in the sandbox with read and write permission
("/tmp", "/home", dir_read | dir_write, file_read | file_write),
]
),
memory=PyTaskMemoryConfig(
# Set the memory limit to 30MB
memory_limit=30 * 1024 * 1024 # 30MB in bytes
)
)py_res = await lcd.exec(python_code, "python", resources=resources)
assert py_res.exit_code == 0, "Python code should exit with 0"# Stop the driver
lcd.stop()asyncio.run(main())
```## Architecture
Lyric core is built with Rust, providing a high-performance and secure runtime environment for multi-language code
execution.The following diagram illustrates the architecture of Lyric:
![Lyric Architecture](docs/asserts/imgs/lyric_architecture.png)
## Examples
- [Notebook-Qick Start](examples/notebook/lyric_quick_start.ipynb): A Jupyter notebook demonstrating how to use Lyric to execute Python and JavaScript code.
- [Notebook-Sandbox Execution](examples/notebook/lyric_sandbox_verification.ipynb): A Jupyter notebook demonstrating how to use Lyric to execute Python and JavaScript code in a sandboxed environment.## Community Integrations
- [DB-GPT](https://github.com/eosphoros-ai/DB-GPT) AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents
## 🤝 Contributing
We welcome Issues and Pull Requests! Please check out our [Contributing Guidelines](.github/CONTRIBUTING.md) for more information.
## 📄 License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details
## ⭐️ Show Your Support
If you find Lyric helpful, please give us a star! It helps others discover this project.