# Gushwork RAG Python SDK
A Python client library for the Gushwork RAG (Retrieval-Augmented Generation) API, inspired by Pinecone's SDK design philosophy.
## Features
- 🔐 **API Key Management** - Create and manage API keys with role-based access control
- 📁 **File Management** - Upload and manage documents with S3 integration
- 🗂️ **Namespace Organization** - Organize documents into logical namespaces
- 💬 **AI Chat Completions** - Get intelligent responses using your documents as context
- 🌊 **Streaming Support** - Real-time streaming responses for chat completions
- 📊 **Structured Output** - Get responses in specific JSON formats
- 🎯 **Type Hints** - Full type hint support for better IDE integration
- 🐍 **Pythonic API** - Clean, intuitive interface following Python best practices
## Installation
```bash
pip install gushwork-rag
```
For development:
```bash
pip install -e ".[dev]"
```
## Quick Start
```python
from gushwork_rag import GushworkRAG
# Initialize the client
client = GushworkRAG(
api_key="your-api-key-here",
base_url="http://localhost:8080" # or your production URL
)
# Create a namespace
namespace = client.namespaces.create(
name="my-documents",
instructions="Answer questions based on the provided documents."
)
# Upload a file
file = client.files.upload(
file_path="document.pdf",
namespace="my-documents"
)
# Chat with your documents
response = client.chat.create(
namespace="my-documents",
messages=[
{"role": "user", "content": "What is the main topic of the document?"}
],
model="gpt-3.5-turbo"
)
print(response.content)
```
## Usage Examples
### Context Manager (Recommended)
```python
from gushwork_rag import GushworkRAG
with GushworkRAG(api_key="your-api-key") as client:
# Your code here
health = client.health_check()
print(health["status"])
# Client is automatically closed
```
### Managing Namespaces
```python
# Create a namespace
namespace = client.namespaces.create(
name="research-papers",
instructions="Provide scientific and accurate answers based on research papers."
)
# List all namespaces
namespaces = client.namespaces.list()
for ns in namespaces:
print(f"{ns.name}: {ns.instructions}")
# Get a specific namespace
namespace = client.namespaces.get(namespace_id="ns_123")
# Update a namespace
updated = client.namespaces.update(
namespace_id="ns_123",
instructions="New instructions here"
)
# Delete a namespace
client.namespaces.delete(namespace_id="ns_123")
```
### File Operations
```python
# Upload a file
file = client.files.upload(
file_path="path/to/document.pdf",
namespace="my-documents",
mime_type="application/pdf" # Optional, auto-detected
)
print(f"Uploaded: {file.file_name}")
# List files in a namespace
files = client.files.list_by_namespace(
namespace="my-documents",
limit=50,
skip=0
)
print(f"Total files: {files.total}")
for file in files.files:
print(f"- {file.file_name} ({file.status})")
# Get file details
file = client.files.get(file_id="file_123")
print(f"Status: {file.status}")
print(f"Uploaded: {file.uploaded_at}")
# Update file status (typically for internal use)
from gushwork_rag import FileStatus
file = client.files.update_status(
file_id="file_123",
status=FileStatus.FILE_INDEXED,
processed_at="2024-01-01T00:00:00Z"
)
# Delete a file
client.files.delete(file_id="file_123")
```
### Chat Completions
#### Simple Chat
```python
response = client.chat.create(
namespace="my-documents",
messages=[
{"role": "user", "content": "What are the key findings?"}
],
model="gpt-3.5-turbo"
)
print(response.content)
```
#### Multi-turn Conversation
```python
from gushwork_rag import Message
messages = [
Message(role="user", content="What is the document about?"),
Message(role="assistant", content="The document discusses AI technologies."),
Message(role="user", content="What are the main benefits mentioned?"),
]
response = client.chat.create(
namespace="my-documents",
messages=messages,
model="gpt-4"
)
print(response.content)
```
#### Streaming Chat
```python
# Stream responses in real-time
for chunk in client.chat.stream(
namespace="my-documents",
messages=[{"role": "user", "content": "Summarize the document"}],
model="gpt-3.5-turbo"
):
content = chunk.get("content", "")
print(content, end="", flush=True)
print() # New line at the end
```
#### Structured Output
```python
# Get responses in a specific JSON format
response = client.chat.create(
namespace="my-documents",
messages=[{"role": "user", "content": "Extract key information"}],
model="gpt-4",
response_format={
"type": "json_schema",
"json_schema": {
"name": "document_summary",
"schema": {
"type": "object",
"properties": {
"title": {"type": "string"},
"summary": {"type": "string"},
"key_points": {
"type": "array",
"items": {"type": "string"}
}
},
"required": ["title", "summary", "key_points"]
}
}
}
)
print(response.content) # Returns a dictionary matching the schema
```
#### Advanced Retrieval Options
```python
from gushwork_rag import RetrievalType
response = client.chat.create(
namespace="my-documents",
messages=[{"role": "user", "content": "What are the conclusions?"}],
model="gpt-3.5-turbo",
retrieval_type=RetrievalType.GEMINI, # or RetrievalType.SIMPLE
top_k=10, # Number of top results to retrieve
top_n=5, # Number of top chunks to return
top_p=0.9 # Top-p sampling parameter
)
```
### API Key Management (Requires ADMIN Access)
```python
from gushwork_rag import APIAccess
# Create a new API key
api_key = client.auth.create_api_key(
key_name="production-key",
access=APIAccess.READ_WRITE
)
print(f"New API Key: {api_key.api_key}")
# Save this key securely!
# List all API keys
keys = client.auth.list_api_keys()
for key in keys:
print(f"{key.key_name}: {key.access} (Last used: {key.last_used})")
# Delete an API key
client.auth.delete_api_key(api_key_id="key_123")
```
## API Reference
### GushworkRAG
Main client class for interacting with the API.
**Methods:**
- `health_check()` - Check API health
- `close()` - Close the HTTP session
- Properties: `namespaces`, `files`, `chat`, `auth`
### NamespacesClient
Manage document namespaces.
**Methods:**
- `create(name, instructions)` - Create a namespace
- `list()` - List all namespaces
- `get(namespace_id)` - Get a namespace by ID
- `update(namespace_id, instructions)` - Update a namespace
- `delete(namespace_id)` - Delete a namespace
### FilesClient
Manage files and documents.
**Methods:**
- `upload(file_path, namespace, mime_type)` - Upload a file
- `get(file_id)` - Get file details
- `list_by_namespace(namespace, limit, skip)` - List files in a namespace
- `update_status(file_id, status, ...)` - Update file status
- `delete(file_id)` - Delete a file
### ChatClient
Chat completions with RAG.
**Methods:**
- `create(namespace, messages, model, **kwargs)` - Get a chat completion
- `stream(namespace, messages, model, **kwargs)` - Stream a chat completion
- `completions(namespace, messages, model, **kwargs)` - Generic completion method
### AuthClient
Manage API keys (requires ADMIN access).
**Methods:**
- `create_api_key(key_name, access)` - Create a new API key
- `list_api_keys()` - List all API keys
- `delete_api_key(api_key_id)` - Delete an API key
## Models
### Enums
- `FileStatus` - File processing status (UPLOAD_URL_CREATED, UPLOADED, PROCESSING, etc.)
- `APIAccess` - Access levels (ADMIN, READ_WRITE, READ)
- `RetrievalType` - Retrieval types (SIMPLE, GEMINI)
### Data Classes
- `Namespace` - Namespace information
- `File` - File metadata
- `APIKey` - API key information
- `Message` - Chat message
- `ChatCompletionResponse` - Chat response
## Error Handling
```python
from gushwork_rag import (
GushworkError,
AuthenticationError,
NotFoundError,
BadRequestError,
ForbiddenError,
ServerError,
)
try:
namespace = client.namespaces.create(name="test", instructions="test")
except AuthenticationError:
print("Invalid API key")
except BadRequestError as e:
print(f"Bad request: {e.message}")
except NotFoundError:
print("Resource not found")
except ForbiddenError:
print("Access forbidden")
except ServerError:
print("Server error")
except GushworkError as e:
print(f"API error: {e.message} (status: {e.status_code})")
```
## Access Levels
- **ADMIN** - Can create API keys and manage all resources
- **READ_WRITE** - Can upload, update, and delete files
- **READ** - Can read files and use chat completions
## Supported File Types
- PDF (`.pdf`)
- Text files (`.txt`)
- Markdown (`.md`)
- Word documents (`.doc`, `.docx`)
Max file size: 10MB (configurable on server)
## Development
### Setup
```bash
# Clone the repository
git clone https://github.com/gushwork/gw-rag.git
cd gw-rag/sdk/python
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install in development mode
pip install -e ".[dev]"
```
### Running Tests
```bash
pytest
```
### Code Formatting
```bash
# Format code
black gushwork_rag/
# Sort imports
isort gushwork_rag/
# Type checking
mypy gushwork_rag/
# Linting
flake8 gushwork_rag/
```
## Examples
See the [examples](./examples) directory for complete working examples:
- `basic_usage.py` - Basic CRUD operations
- `chat_examples.py` - Various chat completion examples
- `streaming_chat.py` - Streaming responses
- `structured_output.py` - JSON schema responses
- `file_management.py` - File upload and management
## Support
- **Documentation**: [GitHub Repository](https://github.com/gushwork/gw-rag)
- **Issues**: [GitHub Issues](https://github.com/gushwork/gw-rag/issues)
- **Email**: support@gushwork.com
## License
MIT License - see LICENSE file for details
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
## Changelog
### 0.1.0 (2024-01-01)
- Initial release
- Support for namespaces, files, chat completions, and API key management
- Streaming support
- Structured output support
- Full type hints
- Comprehensive error handling
Raw data
{
"_id": null,
"home_page": "https://github.com/gushwork/gw-rag",
"name": "gushwork-rag",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "rag, retrieval, ai, llm, chatbot, langchain, vector-search",
"author": "Gushwork",
"author_email": "Gushwork <support@gushwork.com>",
"download_url": "https://files.pythonhosted.org/packages/d1/46/7e781959b8d19068ed49c16ada66c6c9ffc41cd049d802c1175da001163b/gushwork_rag-0.1.1.tar.gz",
"platform": null,
"description": "# Gushwork RAG Python SDK\n\nA Python client library for the Gushwork RAG (Retrieval-Augmented Generation) API, inspired by Pinecone's SDK design philosophy.\n\n## Features\n\n- \ud83d\udd10 **API Key Management** - Create and manage API keys with role-based access control\n- \ud83d\udcc1 **File Management** - Upload and manage documents with S3 integration\n- \ud83d\uddc2\ufe0f **Namespace Organization** - Organize documents into logical namespaces\n- \ud83d\udcac **AI Chat Completions** - Get intelligent responses using your documents as context\n- \ud83c\udf0a **Streaming Support** - Real-time streaming responses for chat completions\n- \ud83d\udcca **Structured Output** - Get responses in specific JSON formats\n- \ud83c\udfaf **Type Hints** - Full type hint support for better IDE integration\n- \ud83d\udc0d **Pythonic API** - Clean, intuitive interface following Python best practices\n\n## Installation\n\n```bash\npip install gushwork-rag\n```\n\nFor development:\n\n```bash\npip install -e \".[dev]\"\n```\n\n## Quick Start\n\n```python\nfrom gushwork_rag import GushworkRAG\n\n# Initialize the client\nclient = GushworkRAG(\n api_key=\"your-api-key-here\",\n base_url=\"http://localhost:8080\" # or your production URL\n)\n\n# Create a namespace\nnamespace = client.namespaces.create(\n name=\"my-documents\",\n instructions=\"Answer questions based on the provided documents.\"\n)\n\n# Upload a file\nfile = client.files.upload(\n file_path=\"document.pdf\",\n namespace=\"my-documents\"\n)\n\n# Chat with your documents\nresponse = client.chat.create(\n namespace=\"my-documents\",\n messages=[\n {\"role\": \"user\", \"content\": \"What is the main topic of the document?\"}\n ],\n model=\"gpt-3.5-turbo\"\n)\n\nprint(response.content)\n```\n\n## Usage Examples\n\n### Context Manager (Recommended)\n\n```python\nfrom gushwork_rag import GushworkRAG\n\nwith GushworkRAG(api_key=\"your-api-key\") as client:\n # Your code here\n health = client.health_check()\n print(health[\"status\"])\n# Client is automatically closed\n```\n\n### Managing Namespaces\n\n```python\n# Create a namespace\nnamespace = client.namespaces.create(\n name=\"research-papers\",\n instructions=\"Provide scientific and accurate answers based on research papers.\"\n)\n\n# List all namespaces\nnamespaces = client.namespaces.list()\nfor ns in namespaces:\n print(f\"{ns.name}: {ns.instructions}\")\n\n# Get a specific namespace\nnamespace = client.namespaces.get(namespace_id=\"ns_123\")\n\n# Update a namespace\nupdated = client.namespaces.update(\n namespace_id=\"ns_123\",\n instructions=\"New instructions here\"\n)\n\n# Delete a namespace\nclient.namespaces.delete(namespace_id=\"ns_123\")\n```\n\n### File Operations\n\n```python\n# Upload a file\nfile = client.files.upload(\n file_path=\"path/to/document.pdf\",\n namespace=\"my-documents\",\n mime_type=\"application/pdf\" # Optional, auto-detected\n)\nprint(f\"Uploaded: {file.file_name}\")\n\n# List files in a namespace\nfiles = client.files.list_by_namespace(\n namespace=\"my-documents\",\n limit=50,\n skip=0\n)\nprint(f\"Total files: {files.total}\")\nfor file in files.files:\n print(f\"- {file.file_name} ({file.status})\")\n\n# Get file details\nfile = client.files.get(file_id=\"file_123\")\nprint(f\"Status: {file.status}\")\nprint(f\"Uploaded: {file.uploaded_at}\")\n\n# Update file status (typically for internal use)\nfrom gushwork_rag import FileStatus\n\nfile = client.files.update_status(\n file_id=\"file_123\",\n status=FileStatus.FILE_INDEXED,\n processed_at=\"2024-01-01T00:00:00Z\"\n)\n\n# Delete a file\nclient.files.delete(file_id=\"file_123\")\n```\n\n### Chat Completions\n\n#### Simple Chat\n\n```python\nresponse = client.chat.create(\n namespace=\"my-documents\",\n messages=[\n {\"role\": \"user\", \"content\": \"What are the key findings?\"}\n ],\n model=\"gpt-3.5-turbo\"\n)\nprint(response.content)\n```\n\n#### Multi-turn Conversation\n\n```python\nfrom gushwork_rag import Message\n\nmessages = [\n Message(role=\"user\", content=\"What is the document about?\"),\n Message(role=\"assistant\", content=\"The document discusses AI technologies.\"),\n Message(role=\"user\", content=\"What are the main benefits mentioned?\"),\n]\n\nresponse = client.chat.create(\n namespace=\"my-documents\",\n messages=messages,\n model=\"gpt-4\"\n)\nprint(response.content)\n```\n\n#### Streaming Chat\n\n```python\n# Stream responses in real-time\nfor chunk in client.chat.stream(\n namespace=\"my-documents\",\n messages=[{\"role\": \"user\", \"content\": \"Summarize the document\"}],\n model=\"gpt-3.5-turbo\"\n):\n content = chunk.get(\"content\", \"\")\n print(content, end=\"\", flush=True)\nprint() # New line at the end\n```\n\n#### Structured Output\n\n```python\n# Get responses in a specific JSON format\nresponse = client.chat.create(\n namespace=\"my-documents\",\n messages=[{\"role\": \"user\", \"content\": \"Extract key information\"}],\n model=\"gpt-4\",\n response_format={\n \"type\": \"json_schema\",\n \"json_schema\": {\n \"name\": \"document_summary\",\n \"schema\": {\n \"type\": \"object\",\n \"properties\": {\n \"title\": {\"type\": \"string\"},\n \"summary\": {\"type\": \"string\"},\n \"key_points\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n }\n },\n \"required\": [\"title\", \"summary\", \"key_points\"]\n }\n }\n }\n)\nprint(response.content) # Returns a dictionary matching the schema\n```\n\n#### Advanced Retrieval Options\n\n```python\nfrom gushwork_rag import RetrievalType\n\nresponse = client.chat.create(\n namespace=\"my-documents\",\n messages=[{\"role\": \"user\", \"content\": \"What are the conclusions?\"}],\n model=\"gpt-3.5-turbo\",\n retrieval_type=RetrievalType.GEMINI, # or RetrievalType.SIMPLE\n top_k=10, # Number of top results to retrieve\n top_n=5, # Number of top chunks to return\n top_p=0.9 # Top-p sampling parameter\n)\n```\n\n### API Key Management (Requires ADMIN Access)\n\n```python\nfrom gushwork_rag import APIAccess\n\n# Create a new API key\napi_key = client.auth.create_api_key(\n key_name=\"production-key\",\n access=APIAccess.READ_WRITE\n)\nprint(f\"New API Key: {api_key.api_key}\")\n# Save this key securely!\n\n# List all API keys\nkeys = client.auth.list_api_keys()\nfor key in keys:\n print(f\"{key.key_name}: {key.access} (Last used: {key.last_used})\")\n\n# Delete an API key\nclient.auth.delete_api_key(api_key_id=\"key_123\")\n```\n\n## API Reference\n\n### GushworkRAG\n\nMain client class for interacting with the API.\n\n**Methods:**\n- `health_check()` - Check API health\n- `close()` - Close the HTTP session\n- Properties: `namespaces`, `files`, `chat`, `auth`\n\n### NamespacesClient\n\nManage document namespaces.\n\n**Methods:**\n- `create(name, instructions)` - Create a namespace\n- `list()` - List all namespaces\n- `get(namespace_id)` - Get a namespace by ID\n- `update(namespace_id, instructions)` - Update a namespace\n- `delete(namespace_id)` - Delete a namespace\n\n### FilesClient\n\nManage files and documents.\n\n**Methods:**\n- `upload(file_path, namespace, mime_type)` - Upload a file\n- `get(file_id)` - Get file details\n- `list_by_namespace(namespace, limit, skip)` - List files in a namespace\n- `update_status(file_id, status, ...)` - Update file status\n- `delete(file_id)` - Delete a file\n\n### ChatClient\n\nChat completions with RAG.\n\n**Methods:**\n- `create(namespace, messages, model, **kwargs)` - Get a chat completion\n- `stream(namespace, messages, model, **kwargs)` - Stream a chat completion\n- `completions(namespace, messages, model, **kwargs)` - Generic completion method\n\n### AuthClient\n\nManage API keys (requires ADMIN access).\n\n**Methods:**\n- `create_api_key(key_name, access)` - Create a new API key\n- `list_api_keys()` - List all API keys\n- `delete_api_key(api_key_id)` - Delete an API key\n\n## Models\n\n### Enums\n\n- `FileStatus` - File processing status (UPLOAD_URL_CREATED, UPLOADED, PROCESSING, etc.)\n- `APIAccess` - Access levels (ADMIN, READ_WRITE, READ)\n- `RetrievalType` - Retrieval types (SIMPLE, GEMINI)\n\n### Data Classes\n\n- `Namespace` - Namespace information\n- `File` - File metadata\n- `APIKey` - API key information\n- `Message` - Chat message\n- `ChatCompletionResponse` - Chat response\n\n## Error Handling\n\n```python\nfrom gushwork_rag import (\n GushworkError,\n AuthenticationError,\n NotFoundError,\n BadRequestError,\n ForbiddenError,\n ServerError,\n)\n\ntry:\n namespace = client.namespaces.create(name=\"test\", instructions=\"test\")\nexcept AuthenticationError:\n print(\"Invalid API key\")\nexcept BadRequestError as e:\n print(f\"Bad request: {e.message}\")\nexcept NotFoundError:\n print(\"Resource not found\")\nexcept ForbiddenError:\n print(\"Access forbidden\")\nexcept ServerError:\n print(\"Server error\")\nexcept GushworkError as e:\n print(f\"API error: {e.message} (status: {e.status_code})\")\n```\n\n## Access Levels\n\n- **ADMIN** - Can create API keys and manage all resources\n- **READ_WRITE** - Can upload, update, and delete files\n- **READ** - Can read files and use chat completions\n\n## Supported File Types\n\n- PDF (`.pdf`)\n- Text files (`.txt`)\n- Markdown (`.md`)\n- Word documents (`.doc`, `.docx`)\n\nMax file size: 10MB (configurable on server)\n\n## Development\n\n### Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/gushwork/gw-rag.git\ncd gw-rag/sdk/python\n\n# Create virtual environment\npython -m venv venv\nsource venv/bin/activate # On Windows: venv\\Scripts\\activate\n\n# Install in development mode\npip install -e \".[dev]\"\n```\n\n### Running Tests\n\n```bash\npytest\n```\n\n### Code Formatting\n\n```bash\n# Format code\nblack gushwork_rag/\n\n# Sort imports\nisort gushwork_rag/\n\n# Type checking\nmypy gushwork_rag/\n\n# Linting\nflake8 gushwork_rag/\n```\n\n\n## Examples\n\nSee the [examples](./examples) directory for complete working examples:\n\n- `basic_usage.py` - Basic CRUD operations\n- `chat_examples.py` - Various chat completion examples\n- `streaming_chat.py` - Streaming responses\n- `structured_output.py` - JSON schema responses\n- `file_management.py` - File upload and management\n\n## Support\n\n- **Documentation**: [GitHub Repository](https://github.com/gushwork/gw-rag)\n- **Issues**: [GitHub Issues](https://github.com/gushwork/gw-rag/issues)\n- **Email**: support@gushwork.com\n\n## License\n\nMIT License - see LICENSE file for details\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## Changelog\n\n### 0.1.0 (2024-01-01)\n\n- Initial release\n- Support for namespaces, files, chat completions, and API key management\n- Streaming support\n- Structured output support\n- Full type hints\n- Comprehensive error handling\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Python SDK for the Gushwork RAG API",
"version": "0.1.1",
"project_urls": {
"Documentation": "https://github.com/gushwork/gw-rag/tree/main/sdk/python",
"Homepage": "https://github.com/gushwork/gw-rag",
"Issues": "https://github.com/gushwork/gw-rag/issues",
"Repository": "https://github.com/gushwork/gw-rag"
},
"split_keywords": [
"rag",
" retrieval",
" ai",
" llm",
" chatbot",
" langchain",
" vector-search"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "7a189b4c3197492cf456e4dd2c80da28685aa78dbd91f8422ef54f86ff9f6898",
"md5": "7aba2ace8c0a83def55135f7321b8928",
"sha256": "412f2a8f5116a9429a6e701ce4aba3aa69a43509e7ca4a8cdc4392882a3337f1"
},
"downloads": -1,
"filename": "gushwork_rag-0.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "7aba2ace8c0a83def55135f7321b8928",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 17233,
"upload_time": "2025-10-16T11:33:49",
"upload_time_iso_8601": "2025-10-16T11:33:49.977193Z",
"url": "https://files.pythonhosted.org/packages/7a/18/9b4c3197492cf456e4dd2c80da28685aa78dbd91f8422ef54f86ff9f6898/gushwork_rag-0.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d1467e781959b8d19068ed49c16ada66c6c9ffc41cd049d802c1175da001163b",
"md5": "18b2816a80861bd8e4f8a62c1a32c408",
"sha256": "74ce5c1650552d75bc5f2e730385321b7fd9de8412820e1fec331e966470daa0"
},
"downloads": -1,
"filename": "gushwork_rag-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "18b2816a80861bd8e4f8a62c1a32c408",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 18198,
"upload_time": "2025-10-16T11:33:52",
"upload_time_iso_8601": "2025-10-16T11:33:52.441912Z",
"url": "https://files.pythonhosted.org/packages/d1/46/7e781959b8d19068ed49c16ada66c6c9ffc41cd049d802c1175da001163b/gushwork_rag-0.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-16 11:33:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "gushwork",
"github_project": "gw-rag",
"github_not_found": true,
"lcname": "gushwork-rag"
}