shadai


Nameshadai JSON
Version 0.1.30 PyPI version JSON
download
home_pageNone
SummarySHADAI Client
upload_time2025-10-17 17:41:45
maintainerNone
docs_urlNone
authorSHADAI GROUP
requires_python>=3.10
licenseNone
keywords shadai ai rag machine-learning nlp knowledge-base mcp async
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Shadai Client - Official Python SDK

[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

**Beautiful, Pythonic client for Shadai AI services.** Query your knowledge base, orchestrate custom tools with intelligent agents, and more with an intuitive, production-ready API.

## 🆕 What's New in v0.1.29

- **🧠 Memory enabled by default** - All tools now use conversation memory by default for better context continuity
- **💬 Chat history management** - New methods to retrieve and clear session history with pagination
- **📖 Enhanced documentation** - Updated examples and API reference with new features

## ✨ Features

- 🚀 **Easy to use** - Clean, intuitive API design with one-step async patterns
- ⚡ **Async streaming** - Real-time streaming responses for all tools
- 🛠️ **Multiple tools** - Query, summarize, search, engine, and intelligent agent
- 🤖 **Intelligent agent** - Automatic plan → execute → synthesize workflow
- 🧠 **Conversation memory** - Built-in memory enabled by default for context continuity
- 💬 **Chat history management** - Get and clear session history with pagination
- 🔒 **Type-safe** - Full type hints and Pydantic models for better IDE support
- 📦 **Minimal dependencies** - Only requires `aiohttp` and `pydantic`
- 🎯 **Production-ready** - Comprehensive error handling

## 📦 Installation

```bash
pip install shadai-client
```

Or install from source:

```bash
cd client
pip install -e .
```

## 🚀 Quick Start

```python
import asyncio
from shadai import Shadai

async def main():
    # Create session and query
    async with Shadai(name="my-session") as shadai:
        # Ingest documents
        await shadai.ingest(folder_path="./documents")

        # Query knowledge base
        async for chunk in shadai.query("What is machine learning?"):
            print(chunk, end="", flush=True)

asyncio.run(main())
```

## 📚 Usage Examples

### Knowledge Base Query

Query your uploaded documents using RAG (Retrieval-Augmented Generation):

```python
async with Shadai(name="research") as shadai:
    # Ingest documents
    await shadai.ingest(folder_path="./documents")

    # Ask questions about your documents
    async for chunk in shadai.query("What are the key findings?"):
        print(chunk, end="", flush=True)

    # Memory is enabled by default for context continuity
    async for chunk in shadai.query("Tell me more about that"):
        print(chunk, end="", flush=True)

    # Disable memory if needed
    async for chunk in shadai.query("Independent question", use_memory=False):
        print(chunk, end="", flush=True)
```

### Document Summarization

Generate comprehensive summaries of all documents in a session:

```python
async with Shadai(name="research") as shadai:
    await shadai.ingest(folder_path="./documents")

    async for chunk in shadai.summarize():
        print(chunk, end="", flush=True)
```

### Web Search

Search the internet for current information:

```python
async with Shadai(name="news") as shadai:
    async for chunk in shadai.web_search("Latest AI developments 2024"):
        print(chunk, end="", flush=True)
```

### Chat History Management

Retrieve and manage conversation history for sessions:

```python
async with Shadai(name="chat") as shadai:
    # Get chat history with pagination
    history = await shadai.get_session_history(
        page=1,
        page_size=5  # Default: 5, Max: 10
    )

    print(f"Total messages: {history['count']}")
    for message in history["results"]:
        print(f"{message['role']}: {message['content']}")

    # Clear all chat history
    result = await shadai.clear_session_history()
    print(result["message"])  # "Session history cleared successfully"
```

### Unified Engine

Orchestrate multiple tools for comprehensive answers:

```python
async with Shadai(name="analysis") as shadai:
    await shadai.ingest(folder_path="./documents")

    async for chunk in shadai.engine(
        prompt="Compare my docs with current trends",
        use_knowledge_base=True,
        use_web_search=True
    ):
        print(chunk, end="", flush=True)
```

### Intelligent Agent

Orchestrate plan → execute → synthesize workflow with custom tools.
**The planner automatically infers tool arguments from your prompt!**

```python
from shadai import Shadai, tool

# Define tools using @tool decorator
@tool
def search_database(query: str, limit: int = 10) -> str:
    """Search database for user information.

    Args:
        query: Search query string
        limit: Maximum number of results
    """
    # Your implementation
    return "Search results..."

@tool
def generate_report(data: str, format: str = "text") -> str:
    """Generate a formatted report.

    Args:
        data: Data to include in report
        format: Report format (text, pdf, etc.)
    """
    # Your implementation
    return "Generated report..."

# Agent automatically infers arguments from your prompt!
async with Shadai(name="agent") as shadai:
    async for chunk in shadai.agent(
        prompt="Find the top 5 users and create a PDF report",
        tools=[search_database, generate_report]
    ):
        print(chunk, end="", flush=True)
```

The agent automatically:
1. **Plans** which tools to use based on your prompt
2. **Infers** the appropriate arguments for each tool from your prompt
3. **Executes** the selected tools locally with inferred arguments
4. **Synthesizes** all outputs into a unified, coherent answer

## 🔧 Configuration

### Environment Variables

```bash
export SHADAI_API_KEY="your-api-key"
export SHADAI_BASE_URL="http://localhost"  # Optional
```

### Client Initialization

```python
# Named session (persistent)
async with Shadai(name="my-project") as shadai:
    await shadai.ingest(folder_path="./docs")

# Temporal session (auto-deleted)
async with Shadai(temporal=True) as shadai:
    async for chunk in shadai.query("Quick question"):
        print(chunk, end="")

# Custom configuration
async with Shadai(
    name="custom",
    api_key="your-api-key",
    base_url="https://api.shadai.com",
    timeout=60  # seconds
) as shadai:
    pass
```

## 🛠️ Available Tools

| Tool | Description | Streaming |
|------|-------------|-----------|
| `query()` | Query knowledge base with RAG | ✅ |
| `summarize()` | Summarize all session documents | ✅ |
| `web_search()` | Search web for current information | ✅ |
| `engine()` | Unified multi-tool orchestration | ✅ |
| `agent()` | Intelligent agent (plan → execute → synthesize) | ✅ |
| `get_session_history()` | Retrieve chat history with pagination | ❌ |
| `clear_session_history()` | Clear all messages in a session | ❌ |

## 📖 API Reference

### Shadai

Main entry point for the client.

```python
Shadai(
    name: str = None,
    temporal: bool = False,
    api_key: str = None,
    base_url: str = "http://localhost",
    timeout: int = 30
)
```

**Methods:**
- `ingest(folder_path)` → `Dict` - Ingest documents from folder
- `query(query, use_memory=True)` → `AsyncIterator[str]` - Query knowledge base
- `summarize(use_memory=True)` → `AsyncIterator[str]` - Summarize documents
- `web_search(prompt, use_web_search=True, use_memory=True)` → `AsyncIterator[str]` - Search web
- `engine(prompt, **options)` → `AsyncIterator[str]` - Unified engine
- `agent(prompt, tools)` → `AsyncIterator[str]` - Intelligent agent
- `get_session_history(page=1, page_size=5)` → `Dict[str, Any]` - Get chat history
- `clear_session_history()` → `Dict[str, str]` - Clear chat history

### query()

Query your knowledge base with streaming responses. Memory enabled by default.

```python
async with Shadai(name="docs") as shadai:
    async for chunk in shadai.query("What is AI?", use_memory=True):
        print(chunk, end="")
```

### summarize()

Summarize all documents in a session. Memory enabled by default.

```python
async with Shadai(name="docs") as shadai:
    async for chunk in shadai.summarize(use_memory=True):
        print(chunk, end="")
```

### web_search()

Search the web for current information. Memory enabled by default.

```python
async with Shadai(name="search") as shadai:
    async for chunk in shadai.web_search("Latest AI news"):
        print(chunk, end="")
```

### engine()

Unified engine with multiple tool capabilities. Memory enabled by default.

```python
async with Shadai(name="engine") as shadai:
    async for chunk in shadai.engine(
        prompt="Analyze my documents",
        use_knowledge_base=True,
        use_web_search=True
    ):
        print(chunk, end="")
```

### get_session_history()

Retrieve chat history with pagination support.

```python
async with Shadai(name="chat") as shadai:
    history = await shadai.get_session_history(page=1, page_size=5)

    # Response includes: count, next, previous, results
    for msg in history["results"]:
        print(f"{msg['role']}: {msg['content']}")
```

### clear_session_history()

Clear all messages in a session.

```python
async with Shadai(name="chat") as shadai:
    result = await shadai.clear_session_history()
    # Returns: {"message": "Session history cleared successfully"}
```

### agent()

Intelligent agent that orchestrates custom tools.

```python
from shadai import tool

@tool
def my_tool(param: str) -> str:
    """Tool description."""
    return "result"

async with Shadai(name="agent") as shadai:
    async for chunk in shadai.agent(
        prompt="Execute task",
        tools=[my_tool]
    ):
        print(chunk, end="")
```

## 🚨 Error Handling

```python
from shadai import (
    Shadai,
    AuthenticationError,
    ConnectionError,
    ServerError
)

try:
    shadai = Shadai(api_key="invalid-key")
    await shadai.health()
except AuthenticationError:
    print("Invalid API key")
except ConnectionError:
    print("Cannot connect to server")
except ServerError as e:
    print(f"Server error: {e}")
```

## 📝 Examples

Check the `examples/` directory for complete examples:

- `query_example.py` - Knowledge base queries
- `summary_example.py` - Document summarization
- `websearch_example.py` - Web search
- `agent_example.py` - Intelligent agent workflow
- `agent_synthesis_example.py` - Advanced synthesis with multiple data sources
- `complete_workflow.py` - Full agent workflow with multiple examples

Run examples:

```bash
cd client/
python examples/query_example.py
python examples/summary_example.py
python examples/websearch_example.py
python examples/agent_example.py
python examples/agent_synthesis_example.py
python examples/complete_workflow.py
```

## 🔒 Security

- Always use environment variables for API keys
- Never commit API keys to version control
- Use HTTPS in production (`base_url="https://..."`)

## 🤝 Contributing

Contributions welcome! Please read our contributing guidelines.

## 📄 License

MIT License - see LICENSE file for details.

## 🔗 Links

- **Documentation**: https://docs.shadai.com
- **GitHub**: https://github.com/shadai/shadai-client
- **Issues**: https://github.com/shadai/shadai-client/issues

## 💡 Support

- 📧 Email: support@shadai.com
- 💬 Discord: https://discord.gg/shadai
- 📖 Docs: https://docs.shadai.com

---

Made with ❤️ by the Shadai Team

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "shadai",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "shadai, ai, rag, machine-learning, nlp, knowledge-base, mcp, async",
    "author": "SHADAI GROUP",
    "author_email": "SHADAI GROUP <jaisir@shadai.ai>",
    "download_url": "https://files.pythonhosted.org/packages/fd/be/a105ceb03f2498b579c191124d07d512fb9826510108948b8fd82ec4825c/shadai-0.1.30.tar.gz",
    "platform": null,
    "description": "# Shadai Client - Official Python SDK\n\n[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n**Beautiful, Pythonic client for Shadai AI services.** Query your knowledge base, orchestrate custom tools with intelligent agents, and more with an intuitive, production-ready API.\n\n## \ud83c\udd95 What's New in v0.1.29\n\n- **\ud83e\udde0 Memory enabled by default** - All tools now use conversation memory by default for better context continuity\n- **\ud83d\udcac Chat history management** - New methods to retrieve and clear session history with pagination\n- **\ud83d\udcd6 Enhanced documentation** - Updated examples and API reference with new features\n\n## \u2728 Features\n\n- \ud83d\ude80 **Easy to use** - Clean, intuitive API design with one-step async patterns\n- \u26a1 **Async streaming** - Real-time streaming responses for all tools\n- \ud83d\udee0\ufe0f **Multiple tools** - Query, summarize, search, engine, and intelligent agent\n- \ud83e\udd16 **Intelligent agent** - Automatic plan \u2192 execute \u2192 synthesize workflow\n- \ud83e\udde0 **Conversation memory** - Built-in memory enabled by default for context continuity\n- \ud83d\udcac **Chat history management** - Get and clear session history with pagination\n- \ud83d\udd12 **Type-safe** - Full type hints and Pydantic models for better IDE support\n- \ud83d\udce6 **Minimal dependencies** - Only requires `aiohttp` and `pydantic`\n- \ud83c\udfaf **Production-ready** - Comprehensive error handling\n\n## \ud83d\udce6 Installation\n\n```bash\npip install shadai-client\n```\n\nOr install from source:\n\n```bash\ncd client\npip install -e .\n```\n\n## \ud83d\ude80 Quick Start\n\n```python\nimport asyncio\nfrom shadai import Shadai\n\nasync def main():\n    # Create session and query\n    async with Shadai(name=\"my-session\") as shadai:\n        # Ingest documents\n        await shadai.ingest(folder_path=\"./documents\")\n\n        # Query knowledge base\n        async for chunk in shadai.query(\"What is machine learning?\"):\n            print(chunk, end=\"\", flush=True)\n\nasyncio.run(main())\n```\n\n## \ud83d\udcda Usage Examples\n\n### Knowledge Base Query\n\nQuery your uploaded documents using RAG (Retrieval-Augmented Generation):\n\n```python\nasync with Shadai(name=\"research\") as shadai:\n    # Ingest documents\n    await shadai.ingest(folder_path=\"./documents\")\n\n    # Ask questions about your documents\n    async for chunk in shadai.query(\"What are the key findings?\"):\n        print(chunk, end=\"\", flush=True)\n\n    # Memory is enabled by default for context continuity\n    async for chunk in shadai.query(\"Tell me more about that\"):\n        print(chunk, end=\"\", flush=True)\n\n    # Disable memory if needed\n    async for chunk in shadai.query(\"Independent question\", use_memory=False):\n        print(chunk, end=\"\", flush=True)\n```\n\n### Document Summarization\n\nGenerate comprehensive summaries of all documents in a session:\n\n```python\nasync with Shadai(name=\"research\") as shadai:\n    await shadai.ingest(folder_path=\"./documents\")\n\n    async for chunk in shadai.summarize():\n        print(chunk, end=\"\", flush=True)\n```\n\n### Web Search\n\nSearch the internet for current information:\n\n```python\nasync with Shadai(name=\"news\") as shadai:\n    async for chunk in shadai.web_search(\"Latest AI developments 2024\"):\n        print(chunk, end=\"\", flush=True)\n```\n\n### Chat History Management\n\nRetrieve and manage conversation history for sessions:\n\n```python\nasync with Shadai(name=\"chat\") as shadai:\n    # Get chat history with pagination\n    history = await shadai.get_session_history(\n        page=1,\n        page_size=5  # Default: 5, Max: 10\n    )\n\n    print(f\"Total messages: {history['count']}\")\n    for message in history[\"results\"]:\n        print(f\"{message['role']}: {message['content']}\")\n\n    # Clear all chat history\n    result = await shadai.clear_session_history()\n    print(result[\"message\"])  # \"Session history cleared successfully\"\n```\n\n### Unified Engine\n\nOrchestrate multiple tools for comprehensive answers:\n\n```python\nasync with Shadai(name=\"analysis\") as shadai:\n    await shadai.ingest(folder_path=\"./documents\")\n\n    async for chunk in shadai.engine(\n        prompt=\"Compare my docs with current trends\",\n        use_knowledge_base=True,\n        use_web_search=True\n    ):\n        print(chunk, end=\"\", flush=True)\n```\n\n### Intelligent Agent\n\nOrchestrate plan \u2192 execute \u2192 synthesize workflow with custom tools.\n**The planner automatically infers tool arguments from your prompt!**\n\n```python\nfrom shadai import Shadai, tool\n\n# Define tools using @tool decorator\n@tool\ndef search_database(query: str, limit: int = 10) -> str:\n    \"\"\"Search database for user information.\n\n    Args:\n        query: Search query string\n        limit: Maximum number of results\n    \"\"\"\n    # Your implementation\n    return \"Search results...\"\n\n@tool\ndef generate_report(data: str, format: str = \"text\") -> str:\n    \"\"\"Generate a formatted report.\n\n    Args:\n        data: Data to include in report\n        format: Report format (text, pdf, etc.)\n    \"\"\"\n    # Your implementation\n    return \"Generated report...\"\n\n# Agent automatically infers arguments from your prompt!\nasync with Shadai(name=\"agent\") as shadai:\n    async for chunk in shadai.agent(\n        prompt=\"Find the top 5 users and create a PDF report\",\n        tools=[search_database, generate_report]\n    ):\n        print(chunk, end=\"\", flush=True)\n```\n\nThe agent automatically:\n1. **Plans** which tools to use based on your prompt\n2. **Infers** the appropriate arguments for each tool from your prompt\n3. **Executes** the selected tools locally with inferred arguments\n4. **Synthesizes** all outputs into a unified, coherent answer\n\n## \ud83d\udd27 Configuration\n\n### Environment Variables\n\n```bash\nexport SHADAI_API_KEY=\"your-api-key\"\nexport SHADAI_BASE_URL=\"http://localhost\"  # Optional\n```\n\n### Client Initialization\n\n```python\n# Named session (persistent)\nasync with Shadai(name=\"my-project\") as shadai:\n    await shadai.ingest(folder_path=\"./docs\")\n\n# Temporal session (auto-deleted)\nasync with Shadai(temporal=True) as shadai:\n    async for chunk in shadai.query(\"Quick question\"):\n        print(chunk, end=\"\")\n\n# Custom configuration\nasync with Shadai(\n    name=\"custom\",\n    api_key=\"your-api-key\",\n    base_url=\"https://api.shadai.com\",\n    timeout=60  # seconds\n) as shadai:\n    pass\n```\n\n## \ud83d\udee0\ufe0f Available Tools\n\n| Tool | Description | Streaming |\n|------|-------------|-----------|\n| `query()` | Query knowledge base with RAG | \u2705 |\n| `summarize()` | Summarize all session documents | \u2705 |\n| `web_search()` | Search web for current information | \u2705 |\n| `engine()` | Unified multi-tool orchestration | \u2705 |\n| `agent()` | Intelligent agent (plan \u2192 execute \u2192 synthesize) | \u2705 |\n| `get_session_history()` | Retrieve chat history with pagination | \u274c |\n| `clear_session_history()` | Clear all messages in a session | \u274c |\n\n## \ud83d\udcd6 API Reference\n\n### Shadai\n\nMain entry point for the client.\n\n```python\nShadai(\n    name: str = None,\n    temporal: bool = False,\n    api_key: str = None,\n    base_url: str = \"http://localhost\",\n    timeout: int = 30\n)\n```\n\n**Methods:**\n- `ingest(folder_path)` \u2192 `Dict` - Ingest documents from folder\n- `query(query, use_memory=True)` \u2192 `AsyncIterator[str]` - Query knowledge base\n- `summarize(use_memory=True)` \u2192 `AsyncIterator[str]` - Summarize documents\n- `web_search(prompt, use_web_search=True, use_memory=True)` \u2192 `AsyncIterator[str]` - Search web\n- `engine(prompt, **options)` \u2192 `AsyncIterator[str]` - Unified engine\n- `agent(prompt, tools)` \u2192 `AsyncIterator[str]` - Intelligent agent\n- `get_session_history(page=1, page_size=5)` \u2192 `Dict[str, Any]` - Get chat history\n- `clear_session_history()` \u2192 `Dict[str, str]` - Clear chat history\n\n### query()\n\nQuery your knowledge base with streaming responses. Memory enabled by default.\n\n```python\nasync with Shadai(name=\"docs\") as shadai:\n    async for chunk in shadai.query(\"What is AI?\", use_memory=True):\n        print(chunk, end=\"\")\n```\n\n### summarize()\n\nSummarize all documents in a session. Memory enabled by default.\n\n```python\nasync with Shadai(name=\"docs\") as shadai:\n    async for chunk in shadai.summarize(use_memory=True):\n        print(chunk, end=\"\")\n```\n\n### web_search()\n\nSearch the web for current information. Memory enabled by default.\n\n```python\nasync with Shadai(name=\"search\") as shadai:\n    async for chunk in shadai.web_search(\"Latest AI news\"):\n        print(chunk, end=\"\")\n```\n\n### engine()\n\nUnified engine with multiple tool capabilities. Memory enabled by default.\n\n```python\nasync with Shadai(name=\"engine\") as shadai:\n    async for chunk in shadai.engine(\n        prompt=\"Analyze my documents\",\n        use_knowledge_base=True,\n        use_web_search=True\n    ):\n        print(chunk, end=\"\")\n```\n\n### get_session_history()\n\nRetrieve chat history with pagination support.\n\n```python\nasync with Shadai(name=\"chat\") as shadai:\n    history = await shadai.get_session_history(page=1, page_size=5)\n\n    # Response includes: count, next, previous, results\n    for msg in history[\"results\"]:\n        print(f\"{msg['role']}: {msg['content']}\")\n```\n\n### clear_session_history()\n\nClear all messages in a session.\n\n```python\nasync with Shadai(name=\"chat\") as shadai:\n    result = await shadai.clear_session_history()\n    # Returns: {\"message\": \"Session history cleared successfully\"}\n```\n\n### agent()\n\nIntelligent agent that orchestrates custom tools.\n\n```python\nfrom shadai import tool\n\n@tool\ndef my_tool(param: str) -> str:\n    \"\"\"Tool description.\"\"\"\n    return \"result\"\n\nasync with Shadai(name=\"agent\") as shadai:\n    async for chunk in shadai.agent(\n        prompt=\"Execute task\",\n        tools=[my_tool]\n    ):\n        print(chunk, end=\"\")\n```\n\n## \ud83d\udea8 Error Handling\n\n```python\nfrom shadai import (\n    Shadai,\n    AuthenticationError,\n    ConnectionError,\n    ServerError\n)\n\ntry:\n    shadai = Shadai(api_key=\"invalid-key\")\n    await shadai.health()\nexcept AuthenticationError:\n    print(\"Invalid API key\")\nexcept ConnectionError:\n    print(\"Cannot connect to server\")\nexcept ServerError as e:\n    print(f\"Server error: {e}\")\n```\n\n## \ud83d\udcdd Examples\n\nCheck the `examples/` directory for complete examples:\n\n- `query_example.py` - Knowledge base queries\n- `summary_example.py` - Document summarization\n- `websearch_example.py` - Web search\n- `agent_example.py` - Intelligent agent workflow\n- `agent_synthesis_example.py` - Advanced synthesis with multiple data sources\n- `complete_workflow.py` - Full agent workflow with multiple examples\n\nRun examples:\n\n```bash\ncd client/\npython examples/query_example.py\npython examples/summary_example.py\npython examples/websearch_example.py\npython examples/agent_example.py\npython examples/agent_synthesis_example.py\npython examples/complete_workflow.py\n```\n\n## \ud83d\udd12 Security\n\n- Always use environment variables for API keys\n- Never commit API keys to version control\n- Use HTTPS in production (`base_url=\"https://...\"`)\n\n## \ud83e\udd1d Contributing\n\nContributions welcome! Please read our contributing guidelines.\n\n## \ud83d\udcc4 License\n\nMIT License - see LICENSE file for details.\n\n## \ud83d\udd17 Links\n\n- **Documentation**: https://docs.shadai.com\n- **GitHub**: https://github.com/shadai/shadai-client\n- **Issues**: https://github.com/shadai/shadai-client/issues\n\n## \ud83d\udca1 Support\n\n- \ud83d\udce7 Email: support@shadai.com\n- \ud83d\udcac Discord: https://discord.gg/shadai\n- \ud83d\udcd6 Docs: https://docs.shadai.com\n\n---\n\nMade with \u2764\ufe0f by the Shadai Team\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "SHADAI Client",
    "version": "0.1.30",
    "project_urls": null,
    "split_keywords": [
        "shadai",
        " ai",
        " rag",
        " machine-learning",
        " nlp",
        " knowledge-base",
        " mcp",
        " async"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "93c2ff83184a37e216d21961fac11bb1940934ace6e22f8830f08d1b2b5e9aa3",
                "md5": "7769866884d5a71809781c33ae3c5bd3",
                "sha256": "0be78c7e68c0df173ef589688406af4e3077ea23d45f65ec6fd3c36505ec8170"
            },
            "downloads": -1,
            "filename": "shadai-0.1.30-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7769866884d5a71809781c33ae3c5bd3",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 26194,
            "upload_time": "2025-10-17T17:41:44",
            "upload_time_iso_8601": "2025-10-17T17:41:44.566518Z",
            "url": "https://files.pythonhosted.org/packages/93/c2/ff83184a37e216d21961fac11bb1940934ace6e22f8830f08d1b2b5e9aa3/shadai-0.1.30-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fdbea105ceb03f2498b579c191124d07d512fb9826510108948b8fd82ec4825c",
                "md5": "1dc18301f28a5985c925cdb374b0c8af",
                "sha256": "ab32e12d1e8ef84bde11394a02f4de1e9ee63c0fb4ca1612a3e46e9b7d28a6ed"
            },
            "downloads": -1,
            "filename": "shadai-0.1.30.tar.gz",
            "has_sig": false,
            "md5_digest": "1dc18301f28a5985c925cdb374b0c8af",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 26969,
            "upload_time": "2025-10-17T17:41:45",
            "upload_time_iso_8601": "2025-10-17T17:41:45.776276Z",
            "url": "https://files.pythonhosted.org/packages/fd/be/a105ceb03f2498b579c191124d07d512fb9826510108948b8fd82ec4825c/shadai-0.1.30.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-17 17:41:45",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "shadai"
}
        
Elapsed time: 9.05715s