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.
Features
- Artifact Management: Create, update, and manage different types of artifacts (text, code, etc.)
- Workspace Organization: Group related artifacts in collaborative workspaces
- Storage Backends: Local file system and S3-compatible storage (via
s3fs) - Embedding Backends: OpenAI-compatible and Ollama embedding support
- Reranking: Local reranking using Qwen3-Reranker models
- HTTP Service: FastAPI-based reranking service
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
import logging
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"))
Using the Reranker
from workspacex.reranker.base import RerankConfig
from workspacex.reranker.local import Qwen3RerankerRunner
from workspacex.artifact import Artifact, ArtifactType
# Initialize reranker
config = RerankConfig(
model_name="Qwen/Qwen3-Reranker-0.6B", # or "Qwen/Qwen3-Reranker-8B"
api_key="not_needed", # Local model doesn't need these
base_url="not_needed"
)
reranker = Qwen3RerankerRunner(config)
# Create some test documents
documents = [
Artifact(artifact_type=ArtifactType.TEXT, content="Python is a programming language."),
Artifact(artifact_type=ArtifactType.TEXT, content="Python is a type of snake.")
]
# Rerank documents
results = reranker.run(
query="What is Python programming?",
documents=documents,
top_n=2
)
# Print results
for result in results:
print(f"Score: {result.score}, Content: {result.artifact.content}")
Running the Reranker Server
- 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
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 with the following endpoints:
- POST
/rerank: Main reranking endpoint - POST
/dify/rerank: Dify-compatible reranking endpoint - GET
/health: Health check endpoint - Interactive API docs at
/docsand/redoc
Example API usage:
# Using Document objects (recommended)
curl -X POST "http://localhost:8000/rerank" \
-H "Content-Type: application/json" \
-d '{
"query": "What is Python?",
"documents": [
{
"content": "Python is a programming language.",
"metadata": {}
},
{
"content": "Python is a type of snake.",
"metadata": {}
}
],
"top_n": 2,
"score_threshold": 0.5
}'
# Using simple strings (also supported)
curl -X POST "http://localhost:8000/rerank" \
-H "Content-Type: application/json" \
-d '{
"query": "What is Python?",
"documents": [
"Python is a programming language.",
"Python is a type of snake."
],
"top_n": 2
}'
Response format:
{
"docs": [
{
"index": 0,
"text": "Python is a programming language.",
"metadata": {"index": 0},
"score": 0.9954494833946228
},
{
"index": 1,
"text": "Python is a type of snake.",
"metadata": {"index": 1},
"score": 0.8291763067245483
}
],
"model": "Qwen/Qwen3-Reranker-0.6B"
}
Dify Integration
For Dify compatibility, use the /dify/rerank endpoint:
curl -X POST "http://localhost:8000/dify/rerank" \
-H "Content-Type: application/json" \
-d '{
"query": "What is Python?",
"documents": [
"Python is a programming language.",
"Python is a type of snake."
],
"top_n": 2
}'
Dify response format:
{
"results": [
{
"index": 0,
"text": "Python is a programming language.",
"metadata": {"index": 0},
"relevance_score": 0.9954494833946228
},
{
"index": 1,
"text": "Python is a type of snake.",
"metadata": {"index": 1},
"relevance_score": 0.8291763067245483
}
],
"model": "Qwen/Qwen3-Reranker-0.6B"
}
Endpoint Differences
The server provides two reranking endpoints with different response formats:
| Feature | /rerank |
/dify/rerank |
|---|---|---|
| Response field | docs |
results |
| Score field | score |
relevance_score |
| Text field | text |
text |
| Index tracking | ✅ | ✅ |
| Model info | ✅ | ✅ |
| Use case | General purpose | Dify integration |
Storage Backends
- Local: Default, stores data in the local file system.
from workspacex.storage.local import LocalPathRepository repo = LocalPathRepository("data/workspaces/demo")
- S3: Store artifacts in S3-compatible storage.
from workspacex.storage.s3 import S3Repository repo = S3Repository(storage_path="demo", bucket="your-bucket", s3_kwargs={"key": "...", "secret": "..."})
Embedding Backends
- OpenAI-Compatible:
from workspacex.embedding.openai_compatible import OpenAICompatibleEmbeddings, EmbeddingsConfig config = EmbeddingsConfig(api_key="sk-...", base_url="https://api.openai.com/v1", model_name="text-embedding-ada-002") embedder = OpenAICompatibleEmbeddings(config)
- Ollama:
from workspacex.embedding.ollama import OllamaEmbeddings, OllamaConfig config = OllamaConfig(model="nomic-embed-text", base_url="http://localhost:11434") embedder = OllamaEmbeddings(config)
Example Scripts
- See
src/examples/for ready-to-run scripts:noval_example.pyembeddings/openai_example.pyembeddings/ollama_embedding_example.pyimage_examples.py
Run an example:
export PYTHONPATH=src
python src/examples/embeddings/openai_example.py
Notes
- All source code is under
src/. - Make sure to activate the correct conda environment before using Poetry commands or running code.
- If you see
ModuleNotFoundError: No module named 'workspacex', ensure yourPYTHONPATHincludessrc. - Storage and embedding backends are pluggable and extensible.
- For S3 support, install
s3fsand configure credentials as needed. - For reranking, CUDA is recommended for better performance.
- The reranker server supports both CPU and GPU inference.
Let me know if you want to add more details, such as advanced usage, API docs, or contribution guidelines!
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.7.tar.gz.
File metadata
- Download URL: workspacex-0.1.7.tar.gz
- Upload date:
- Size: 25.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.10.16 Darwin/24.3.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0fbdd9e07547ad5828ecbcb8bcf476048de10fb2033df657d27796d161314cee
|
|
| MD5 |
dc02aaf69e8ecc064f1c270225058050
|
|
| BLAKE2b-256 |
010868d02ca22b95ccec625462a96c7bd986d07cdb9e2425031e8fb8f065854a
|
File details
Details for the file workspacex-0.1.7-py3-none-any.whl.
File metadata
- Download URL: workspacex-0.1.7-py3-none-any.whl
- Upload date:
- Size: 34.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.10.16 Darwin/24.3.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fea3eaa5dff1428be05b3568a0c91c82811d0dfe41c754a7ae2dece69c5e1187
|
|
| MD5 |
72514f1902201f6d84195092ced4df82
|
|
| BLAKE2b-256 |
66126a98840984dcff2e844b11ec072a43b5255af9b93b3f6d0fe2ccd24fe19e
|