gushwork-rag


Namegushwork-rag JSON
Version 0.1.1 PyPI version JSON
download
home_pagehttps://github.com/gushwork/gw-rag
SummaryPython SDK for the Gushwork RAG API
upload_time2025-10-16 11:33:52
maintainerNone
docs_urlNone
authorGushwork
requires_python>=3.8
licenseMIT
keywords rag retrieval ai llm chatbot langchain vector-search
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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"
}
        
Elapsed time: 3.02275s