workspacex is a Python library for managing AIGC (AI-Generated Content) artifacts. It provides a collaborative workspace environment for handling multiple artifacts with features like version control, update notifications, artifact management, and pluggable storage and embedding backends.
Project description
workspacex
workspacex is a Python library for managing AIGC (AI-Generated Content) artifacts. It provides a collaborative workspace environment for handling multiple artifacts with features like version control, update notifications, artifact management, and pluggable storage and embedding backends.
{width=800px height=400px}
Features
- Artifact Management: Create, update, and manage different types of artifacts (text, code, novels, etc.)
- Workspace Organization: Group related artifacts in collaborative workspaces
- Parallel Processing: 🚀 Subartifacts are processed in parallel for improved performance
- Storage Backends: Local file system and S3-compatible storage (via
s3fs) - Embedding Backends: OpenAI-compatible and Ollama embedding support
- Vector Search: Hybrid search combining semantic and keyword-based search
- Full-Text Search: Elasticsearch-based full-text search with Chinese analyzer support
- Reranking: Local reranking using Qwen3-Reranker models
- HTTP Service: FastAPI-based reranking service
- 📎 Attachment Support: Attach files to artifacts with metadata and descriptions
- 📄 arXiv Integration: Download and process arXiv papers with PDF parsing and markdown conversion
Process
{width=400px height=800px}
Installation
Basic Installation
pip install workspacex
With Reranker Support
pip install "workspacex[reranker]" # For using reranker in your code
pip install "workspacex[reranker-server]" # For running the reranker HTTP service
Using Poetry:
poetry install --extras "reranker-server" # Installs all features
Usage
Basic Example
import asyncio
from workspacex.utils.logger import logger
from workspacex import WorkSpace, ArtifactType
if __name__ == '__main__':
workspace = WorkSpace.from_local_storages(workspace_id="demo")
asyncio.run(workspace.create_artifact(ArtifactType.TEXT, "artifact_001"))
Attachment Support Example
WorkspaceX supports file attachments for artifacts, allowing you to attach files with metadata and descriptions:
import asyncio
from workspacex import WorkSpace, ArtifactType
from workspacex.artifact import AttachmentFile
async def attachment_example():
workspace = WorkSpace(workspace_id="attachment_demo", clear_existing=True)
# Create an artifact
artifacts = await workspace.create_artifact(
artifact_type=ArtifactType.TEXT,
content="This artifact has attached files"
)
artifact = artifacts[0]
# Add attachment files
artifact.add_attachment_file(
AttachmentFile(
file_name="document.pdf",
file_desc="Important PDF document",
file_path="/path/to/document.pdf"
)
)
# Save the artifact with attachments
await workspace.add_artifact(artifact)
# Retrieve attachment information
print(f"📎 Attachments: {artifact.attachment_files_desc()}")
# Run the example
asyncio.run(attachment_example())
arXiv Paper Processing Example
WorkspaceX supports arXiv paper processing with automatic PDF download, parsing, and markdown conversion:
import asyncio
from workspacex import WorkSpace, ArtifactType
async def arxiv_example():
workspace = WorkSpace(workspace_id="arxiv_demo", clear_existing=True)
# Create an arXiv artifact by paper ID
artifacts = await workspace.create_artifact(
artifact_type=ArtifactType.ARXIV,
arxiv_id="2507.21509" # arXiv paper ID
)
arxiv_artifact = artifacts[0]
print(f"📄 Processed arXiv paper: {arxiv_artifact.arxiv_id}")
print(f"📎 Attachments: {len(arxiv_artifact.attachment_files)} files")
# The artifact automatically includes:
# - Original PDF file
# - Converted markdown zip file
# - Parsed content for chunking and search
# Run the example
asyncio.run(arxiv_example())
Parallel Processing Demo
WorkspaceX now supports high-performance parallel processing of artifacts and subartifacts, providing significant performance improvements:
Key Features:
- 🚀 Full Parallel Processing: Main artifacts and subartifacts processed simultaneously
- ⚡ Thread Pool Optimization: CPU-intensive operations moved to thread pool
- 🎯 Configurable Concurrency: Control concurrent operations with
max_concurrent_embeddings - 🛡️ Error Handling: Robust error handling with detailed logging
- 📊 Performance Monitoring: Real-time performance metrics and logging
import asyncio
from workspacex import WorkSpace, ArtifactType
async def demo_enhanced_parallel_processing():
workspace = WorkSpace(workspace_id="parallel_demo", clear_existing=True)
# Configure concurrency limits (optional)
workspace.workspace_config.max_concurrent_embeddings = 10
# Create an artifact with multiple subartifacts
# All artifacts and subartifacts will be processed in parallel for maximum performance
await workspace.create_artifact(
artifact_type=ArtifactType.NOVEL,
novel_file_path="path/to/novel.txt",
embedding_flag=True # Enables parallel embedding processing
)
# Run the demo
asyncio.run(demo_enhanced_parallel_processing())
Performance Improvements:
- Sequential Processing: ~1.0x baseline
- Parallel Subartifacts Only: ~2-3x faster
- Full Parallel Processing: ~5-10x faster
- Batch Processing: ~10-20x faster
For a complete performance comparison demo, see src/examples/parallel_processing_example.py.
More Examples
For more detailed examples on features like reranking, storage/embedding backends, hybrid search, Chinese full-text search, attachment handling, and arXiv processing, please refer to the scripts in the src/examples/ directory.
To run an example:
export PYTHONPATH=src
python src/examples/embeddings/openai_example.py
python src/examples/arxiv_example.py # arXiv processing example
Running the Reranker Server[Optional]
- Install server dependencies:
pip install "workspacex[reranker-server]"
- Start the server:
python -m workspacex.reranker.server.reranker_server
Default model: Qwen/Qwen3-Reranker-0.6B
To download the model first:
# Install huggingface_hub pip install -U huggingface_hub # Set mirror for faster download in China export HF_ENDPOINT=https://hf-mirror.com # Download the model huggingface-cli download --resume-download Qwen/Qwen3-Reranker-0.6B --local-dir Qwen/Qwen3-Reranker-0.6B
The server can be configured with these environment variables:
RERANKER_MODEL=Qwen/Qwen3-Reranker-0.6B # or Qwen/Qwen3-Reranker-8B
RERANKER_PORT=8000
RERANKER_RELOAD=False
The server will start on http://localhost:8000. Interactive API docs are available at /docs and /redoc. It provides endpoints like /rerank and a Dify-compatible /dify/rerank.
Changelog
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file workspacex-0.1.35.tar.gz.
File metadata
- Download URL: workspacex-0.1.35.tar.gz
- Upload date:
- Size: 61.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.2 CPython/3.12.9 Darwin/24.3.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3644adf72687baf2831fb985f0c6d1dd5a80aed95862796609daa8016e85bd2
|
|
| MD5 |
7bf91b94df938fa17a57e790791f2707
|
|
| BLAKE2b-256 |
fdb189cbba013ff100e472af828381aea0fadb2b1d91e2e411a0940587fb78d5
|
File details
Details for the file workspacex-0.1.35-py3-none-any.whl.
File metadata
- Download URL: workspacex-0.1.35-py3-none-any.whl
- Upload date:
- Size: 82.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.2 CPython/3.12.9 Darwin/24.3.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e9501c48976f148f1e12f6f5c419bc8a171ea15dabd3b5461aae9996182ff58
|
|
| MD5 |
f53cc4802b69565d6f811589013bb128
|
|
| BLAKE2b-256 |
1b7c855398c8a00de3322f3e07af567cd3fd0c5583423277b35e2877274438c7
|