kagura-ai


Namekagura-ai JSON
Version 3.0.8 PyPI version JSON
download
home_pageNone
SummaryPython-First AI Agent SDK - Build production AI with one decorator
upload_time2025-10-22 16:27:32
maintainerNone
docs_urlNone
authorNone
requires_python>=3.11
licenseNone
keywords ai sdk agents llm type-safe production-ready openai anthropic gemini pydantic async
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Kagura AI

[![Python versions](https://img.shields.io/pypi/pyversions/kagura-ai.svg)](https://pypi.org/project/kagura-ai/)
[![PyPI version](https://img.shields.io/pypi/v/kagura-ai.svg)](https://pypi.org/project/kagura-ai/)
[![PyPI - Downloads](https://img.shields.io/pypi/dm/kagura-ai)](https://pypi.org/project/kagura-ai/)
[![Codecov](https://img.shields.io/codecov/c/github/JFK/kagura-ai)](https://codecov.io/gh/JFK/kagura-ai)
[![Tests](https://img.shields.io/github/actions/workflow/status/JFK/kagura-ai/test.yml?label=tests)](https://github.com/JFK/kagura-ai/actions)

> **The Python-First AI Agent SDK**

Build production-ready AI agents with one decorator. Full type safety, built-in tools, and comprehensive testing framework.

```bash
pip install kagura-ai[full]
```

---

## ⚡ Quick Start (30 seconds)

```python
from kagura import agent

@agent
async def translator(text: str, lang: str = "ja") -> str:
    '''Translate to {{ lang }}: {{ text }}'''

result = await translator("Hello World", lang="ja")
print(result)  # "こんにちは世界"
```

That's it. One decorator, type hints, done.

---

## 🎯 Why Kagura AI?

### Built for Python Developers

| What You Need | Other SDKs | Kagura AI |
|---------------|------------|-----------|
| **Simple API** | 50+ lines config | **1 decorator** ✅ |
| **Type Safety** | Runtime errors | **pyright strict** ✅ |
| **Memory System** | Manual setup | **Built-in** ✅ |
| **Web Search** | External plugins | **Built-in** ✅ |
| **Code Execution** | Unsafe | **Sandboxed** ✅ |
| **Testing** | DIY | **Framework included** ✅ |

### Designed for Production

```python
from kagura import agent
from pydantic import BaseModel

class Analysis(BaseModel):
    sentiment: str
    keywords: list[str]
    confidence: float

@agent(enable_memory=True, tools=["web_search"])
async def analyzer(text: str) -> Analysis:
    '''Analyze sentiment and extract keywords from: {{ text }}

    Use web_search(query) if you need current information.
    '''

# Type-safe, memory-enabled, web-connected
result = await analyzer("Latest AI trends")
print(result.sentiment)  # IDE autocomplete works!
```

---

## 🚀 Core Features

### 1. One-Line Agent Creation

```python
@agent
async def summarizer(text: str) -> str:
    '''Summarize in 3 points: {{ text }}'''
```

### 2. Type-Safe Structured Output

```python
from pydantic import BaseModel

class Report(BaseModel):
    summary: str
    action_items: list[str]

@agent
async def meeting_analyzer(transcript: str) -> Report:
    '''Analyze meeting: {{ transcript }}'''

report = await meeting_analyzer("...")
for item in report.action_items:  # Fully typed!
    print(f"TODO: {item}")
```

### 3. Built-in Tools

```python
@agent(tools=["web_search", "web_fetch"])
async def researcher(topic: str) -> str:
    '''Research {{ topic }} using:
    - web_search(query): Brave Search API
    - web_fetch(url): Scrape webpage content
    '''
```

Built-in tools include: file operations, web search, code execution, YouTube data, and more.

### 4. Memory Management

```python
@agent(enable_memory=True)
async def assistant(message: str) -> str:
    '''You remember our conversation.

    User says: {{ message }}'''

# Multi-turn conversation with context
await assistant("My favorite color is blue")
await assistant("What's my favorite color?")  # Remembers!
```

### 5. Custom Tools

```python
from kagura import tool, agent

@tool
async def search_database(query: str) -> list[dict]:
    '''Search internal database'''
    return db.query(query)

@agent(tools=[search_database])
async def data_agent(question: str) -> str:
    '''Answer using database: {{ question }}'''
```

### 6. Multi-LLM Support

```python
# OpenAI
@agent(model="gpt-4o")
async def translator(text: str) -> str: ...

# Anthropic
@agent(model="claude-3-5-sonnet-20241022")
async def writer(prompt: str) -> str: ...

# Google
@agent(model="gemini/gemini-2.0-flash")
async def analyzer(text: str) -> str: ...
```

100+ models via LiteLLM integration.

---

## 💼 Real-World Use Cases

### SDK Integration Examples

#### Web Application (FastAPI)

```python
from fastapi import FastAPI
from kagura import agent

app = FastAPI()

@agent
async def support_bot(question: str) -> str:
    '''Answer customer support question: {{ question }}'''

@app.post("/api/support")
async def handle_support(question: str):
    response = await support_bot(question)
    return {"answer": response}
```

#### Data Pipeline

```python
from kagura import agent

@agent(tools=["web_search"])
async def data_enricher(company_name: str) -> dict:
    '''Enrich company data for: {{ company_name }}

    Steps:
    1. Search web for company information
    2. Extract: industry, size, location, description
    3. Return as structured data
    '''

# Use in your ETL pipeline
enriched = await data_enricher("Anthropic")
```

#### Automation Script

```python
from kagura import agent, workflow

@agent
async def email_classifier(email: str) -> str:
    '''Classify email as: urgent/important/spam

    Email: {{ email }}'''

@workflow.chain
async def inbox_automation(emails: list[str]):
    for email in emails:
        category = await email_classifier(email)
        # Route based on category
```

---

## 🎨 Advanced Features

### Multimodal Analysis

```python
@agent
async def image_analyzer(image_path: str, question: str) -> str:
    '''Analyze image and answer: {{ question }}

    Image: {{ image_path }}'''

result = await image_analyzer("chart.png", "What's the trend?")
# Uses Gemini Vision API automatically
```

### Document RAG

```python
from kagura.core.memory import MemoryRAG

@agent(enable_memory=True)
async def doc_qa(question: str) -> str:
    '''Answer based on indexed documents

    Use rag_search(query) to find relevant information.
    '''

# Index once
rag = MemoryRAG()
await rag.index_directory("./docs")

# Query anytime
answer = await doc_qa("What does Q3 report say about sales?")
```

### Agent Testing

```python
from kagura.testing import AgentTestCase

class TestMyAgent(AgentTestCase):
    async def test_translation(self):
        result = await translator("Hello", lang="ja")

        # Semantic assertions (LLM-powered)
        self.assert_semantic_match(
            result,
            "Japanese greeting"
        )
```

### Cost Tracking

```python
from kagura.observability import track_cost

@agent
@track_cost
async def expensive_agent(query: str) -> str:
    '''Complex analysis: {{ query }}'''

# Automatic cost tracking
# View with: kagura monitor stats
```

---

## 🎮 Bonus: Interactive Chat

Want to try Kagura without writing code?

```bash
kagura chat
```

You get a Claude Code-like experience with all features built-in:

```
[You] > Read report.pdf and summarize

[AI] > (Analyzes PDF with Gemini Vision)

      Key findings:
      1. Revenue up 23% YoY
      2. New market expansion successful
      3. Engineering team doubled

[You] > Search for similar reports

[AI] > (Uses Brave Search, finds relevant content)

[You] > Create a comparison chart

[AI] > (Writes Python code, executes in sandbox, shows chart)
```

All file operations, web search, code execution, and multimodal analysis work automatically.

---

## 📦 Installation

### Basic

```bash
pip install kagura-ai
```

### With All Features (Recommended)

```bash
pip install kagura-ai[full]  # Memory + Web + Multimodal + Auth + MCP
```

### Pick What You Need

```bash
pip install kagura-ai[ai]    # Memory + Routing + Context Compression
pip install kagura-ai[web]   # Web search + Multimodal
pip install kagura-ai[auth]  # OAuth2
pip install kagura-ai[mcp]   # Claude Desktop integration
```

### Environment Setup

```bash
# At least one LLM API key required
export OPENAI_API_KEY=sk-...

# Optional features
export BRAVE_SEARCH_API_KEY=...  # Web search
export GOOGLE_API_KEY=...         # Multimodal (Gemini)
```

---

## 📚 Documentation

### For Developers (SDK)
- [API Reference](docs/api/) - All decorators, classes, functions
- [SDK Guide](docs/sdk-guide.md) - @agent, @tool, memory, workflows
- [Examples](./examples/) - 30+ code examples

### For Users (Chat)
- [Chat Guide](docs/chat-guide.md) - Interactive chat features
- [Quick Start](docs/quickstart.md) - Get started in 5 minutes

### Integration
- [MCP Integration](docs/en/guides/claude-code-mcp-setup.md) - Claude Desktop setup
- [Testing Guide](docs/en/tutorials/14-testing.md) - Test your agents

---

## 🏗️ Architecture

Built on proven technologies:

- **LLM**: OpenAI SDK (direct) + LiteLLM (100+ providers)
- **Memory**: ChromaDB (vector storage)
- **Validation**: Pydantic v2
- **Testing**: pytest + custom framework
- **Type Safety**: pyright strict mode

**Quality Metrics**:
- 1,300+ tests (90%+ coverage)
- 100% typed
- Production-ready

---

## 🔧 Development

```bash
# Setup
git clone https://github.com/JFK/kagura-ai.git
cd kagura-ai
uv sync --all-extras

# Test
pytest -n auto

# Type check
pyright src/kagura/

# Lint
ruff check src/
```

See [CONTRIBUTING.md](./CONTRIBUTING.md) for details.

---

## 🗺️ Roadmap

### Recently Released (v2.7.x)
- ✅ Streaming support (90% faster UX)
- ✅ User config system (`kagura init`)
- ✅ Personal tools (news, weather, recipes, events)
- ✅ MCP full integration (15 built-in tools)
- ✅ Context compression (handle 10,000+ messages)

### Coming in v3.0
- 🔄 Documentation refresh (SDK-first)
- 🔄 Enhanced Meta Agent (`/create` in chat)
- 🔄 Cost visibility (`/stats` in chat)

### Future (v3.1+)
- 🔮 Auto-discovery & intent detection
- 🔮 Voice interface
- 🔮 Google Workspace integration

---

## 📄 License

Apache License 2.0 - see [LICENSE](./LICENSE)

---

## 🌸 About the Name

"Kagura (神楽)" is traditional Japanese performing art embodying harmony and creativity - principles at the heart of this SDK.

---

**Built with ❤️ for developers who want type-safe AI**

[GitHub](https://github.com/JFK/kagura-ai) • [PyPI](https://pypi.org/project/kagura-ai/) • [Documentation](https://www.kagura-ai.com/)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "kagura-ai",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": "ai, sdk, agents, llm, type-safe, production-ready, openai, anthropic, gemini, pydantic, async",
    "author": null,
    "author_email": "JFK <fumikazu.kiyota@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/08/d2/88b55017c2d6a4c6ed3ee8bdc6395e15982835c5e9a0d8c2c349623884cc/kagura-ai-3.0.8.tar.gz",
    "platform": null,
    "description": "# Kagura AI\n\n[![Python versions](https://img.shields.io/pypi/pyversions/kagura-ai.svg)](https://pypi.org/project/kagura-ai/)\n[![PyPI version](https://img.shields.io/pypi/v/kagura-ai.svg)](https://pypi.org/project/kagura-ai/)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/kagura-ai)](https://pypi.org/project/kagura-ai/)\n[![Codecov](https://img.shields.io/codecov/c/github/JFK/kagura-ai)](https://codecov.io/gh/JFK/kagura-ai)\n[![Tests](https://img.shields.io/github/actions/workflow/status/JFK/kagura-ai/test.yml?label=tests)](https://github.com/JFK/kagura-ai/actions)\n\n> **The Python-First AI Agent SDK**\n\nBuild production-ready AI agents with one decorator. Full type safety, built-in tools, and comprehensive testing framework.\n\n```bash\npip install kagura-ai[full]\n```\n\n---\n\n## \u26a1 Quick Start (30 seconds)\n\n```python\nfrom kagura import agent\n\n@agent\nasync def translator(text: str, lang: str = \"ja\") -> str:\n    '''Translate to {{ lang }}: {{ text }}'''\n\nresult = await translator(\"Hello World\", lang=\"ja\")\nprint(result)  # \"\u3053\u3093\u306b\u3061\u306f\u4e16\u754c\"\n```\n\nThat's it. One decorator, type hints, done.\n\n---\n\n## \ud83c\udfaf Why Kagura AI?\n\n### Built for Python Developers\n\n| What You Need | Other SDKs | Kagura AI |\n|---------------|------------|-----------|\n| **Simple API** | 50+ lines config | **1 decorator** \u2705 |\n| **Type Safety** | Runtime errors | **pyright strict** \u2705 |\n| **Memory System** | Manual setup | **Built-in** \u2705 |\n| **Web Search** | External plugins | **Built-in** \u2705 |\n| **Code Execution** | Unsafe | **Sandboxed** \u2705 |\n| **Testing** | DIY | **Framework included** \u2705 |\n\n### Designed for Production\n\n```python\nfrom kagura import agent\nfrom pydantic import BaseModel\n\nclass Analysis(BaseModel):\n    sentiment: str\n    keywords: list[str]\n    confidence: float\n\n@agent(enable_memory=True, tools=[\"web_search\"])\nasync def analyzer(text: str) -> Analysis:\n    '''Analyze sentiment and extract keywords from: {{ text }}\n\n    Use web_search(query) if you need current information.\n    '''\n\n# Type-safe, memory-enabled, web-connected\nresult = await analyzer(\"Latest AI trends\")\nprint(result.sentiment)  # IDE autocomplete works!\n```\n\n---\n\n## \ud83d\ude80 Core Features\n\n### 1. One-Line Agent Creation\n\n```python\n@agent\nasync def summarizer(text: str) -> str:\n    '''Summarize in 3 points: {{ text }}'''\n```\n\n### 2. Type-Safe Structured Output\n\n```python\nfrom pydantic import BaseModel\n\nclass Report(BaseModel):\n    summary: str\n    action_items: list[str]\n\n@agent\nasync def meeting_analyzer(transcript: str) -> Report:\n    '''Analyze meeting: {{ transcript }}'''\n\nreport = await meeting_analyzer(\"...\")\nfor item in report.action_items:  # Fully typed!\n    print(f\"TODO: {item}\")\n```\n\n### 3. Built-in Tools\n\n```python\n@agent(tools=[\"web_search\", \"web_fetch\"])\nasync def researcher(topic: str) -> str:\n    '''Research {{ topic }} using:\n    - web_search(query): Brave Search API\n    - web_fetch(url): Scrape webpage content\n    '''\n```\n\nBuilt-in tools include: file operations, web search, code execution, YouTube data, and more.\n\n### 4. Memory Management\n\n```python\n@agent(enable_memory=True)\nasync def assistant(message: str) -> str:\n    '''You remember our conversation.\n\n    User says: {{ message }}'''\n\n# Multi-turn conversation with context\nawait assistant(\"My favorite color is blue\")\nawait assistant(\"What's my favorite color?\")  # Remembers!\n```\n\n### 5. Custom Tools\n\n```python\nfrom kagura import tool, agent\n\n@tool\nasync def search_database(query: str) -> list[dict]:\n    '''Search internal database'''\n    return db.query(query)\n\n@agent(tools=[search_database])\nasync def data_agent(question: str) -> str:\n    '''Answer using database: {{ question }}'''\n```\n\n### 6. Multi-LLM Support\n\n```python\n# OpenAI\n@agent(model=\"gpt-4o\")\nasync def translator(text: str) -> str: ...\n\n# Anthropic\n@agent(model=\"claude-3-5-sonnet-20241022\")\nasync def writer(prompt: str) -> str: ...\n\n# Google\n@agent(model=\"gemini/gemini-2.0-flash\")\nasync def analyzer(text: str) -> str: ...\n```\n\n100+ models via LiteLLM integration.\n\n---\n\n## \ud83d\udcbc Real-World Use Cases\n\n### SDK Integration Examples\n\n#### Web Application (FastAPI)\n\n```python\nfrom fastapi import FastAPI\nfrom kagura import agent\n\napp = FastAPI()\n\n@agent\nasync def support_bot(question: str) -> str:\n    '''Answer customer support question: {{ question }}'''\n\n@app.post(\"/api/support\")\nasync def handle_support(question: str):\n    response = await support_bot(question)\n    return {\"answer\": response}\n```\n\n#### Data Pipeline\n\n```python\nfrom kagura import agent\n\n@agent(tools=[\"web_search\"])\nasync def data_enricher(company_name: str) -> dict:\n    '''Enrich company data for: {{ company_name }}\n\n    Steps:\n    1. Search web for company information\n    2. Extract: industry, size, location, description\n    3. Return as structured data\n    '''\n\n# Use in your ETL pipeline\nenriched = await data_enricher(\"Anthropic\")\n```\n\n#### Automation Script\n\n```python\nfrom kagura import agent, workflow\n\n@agent\nasync def email_classifier(email: str) -> str:\n    '''Classify email as: urgent/important/spam\n\n    Email: {{ email }}'''\n\n@workflow.chain\nasync def inbox_automation(emails: list[str]):\n    for email in emails:\n        category = await email_classifier(email)\n        # Route based on category\n```\n\n---\n\n## \ud83c\udfa8 Advanced Features\n\n### Multimodal Analysis\n\n```python\n@agent\nasync def image_analyzer(image_path: str, question: str) -> str:\n    '''Analyze image and answer: {{ question }}\n\n    Image: {{ image_path }}'''\n\nresult = await image_analyzer(\"chart.png\", \"What's the trend?\")\n# Uses Gemini Vision API automatically\n```\n\n### Document RAG\n\n```python\nfrom kagura.core.memory import MemoryRAG\n\n@agent(enable_memory=True)\nasync def doc_qa(question: str) -> str:\n    '''Answer based on indexed documents\n\n    Use rag_search(query) to find relevant information.\n    '''\n\n# Index once\nrag = MemoryRAG()\nawait rag.index_directory(\"./docs\")\n\n# Query anytime\nanswer = await doc_qa(\"What does Q3 report say about sales?\")\n```\n\n### Agent Testing\n\n```python\nfrom kagura.testing import AgentTestCase\n\nclass TestMyAgent(AgentTestCase):\n    async def test_translation(self):\n        result = await translator(\"Hello\", lang=\"ja\")\n\n        # Semantic assertions (LLM-powered)\n        self.assert_semantic_match(\n            result,\n            \"Japanese greeting\"\n        )\n```\n\n### Cost Tracking\n\n```python\nfrom kagura.observability import track_cost\n\n@agent\n@track_cost\nasync def expensive_agent(query: str) -> str:\n    '''Complex analysis: {{ query }}'''\n\n# Automatic cost tracking\n# View with: kagura monitor stats\n```\n\n---\n\n## \ud83c\udfae Bonus: Interactive Chat\n\nWant to try Kagura without writing code?\n\n```bash\nkagura chat\n```\n\nYou get a Claude Code-like experience with all features built-in:\n\n```\n[You] > Read report.pdf and summarize\n\n[AI] > (Analyzes PDF with Gemini Vision)\n\n      Key findings:\n      1. Revenue up 23% YoY\n      2. New market expansion successful\n      3. Engineering team doubled\n\n[You] > Search for similar reports\n\n[AI] > (Uses Brave Search, finds relevant content)\n\n[You] > Create a comparison chart\n\n[AI] > (Writes Python code, executes in sandbox, shows chart)\n```\n\nAll file operations, web search, code execution, and multimodal analysis work automatically.\n\n---\n\n## \ud83d\udce6 Installation\n\n### Basic\n\n```bash\npip install kagura-ai\n```\n\n### With All Features (Recommended)\n\n```bash\npip install kagura-ai[full]  # Memory + Web + Multimodal + Auth + MCP\n```\n\n### Pick What You Need\n\n```bash\npip install kagura-ai[ai]    # Memory + Routing + Context Compression\npip install kagura-ai[web]   # Web search + Multimodal\npip install kagura-ai[auth]  # OAuth2\npip install kagura-ai[mcp]   # Claude Desktop integration\n```\n\n### Environment Setup\n\n```bash\n# At least one LLM API key required\nexport OPENAI_API_KEY=sk-...\n\n# Optional features\nexport BRAVE_SEARCH_API_KEY=...  # Web search\nexport GOOGLE_API_KEY=...         # Multimodal (Gemini)\n```\n\n---\n\n## \ud83d\udcda Documentation\n\n### For Developers (SDK)\n- [API Reference](docs/api/) - All decorators, classes, functions\n- [SDK Guide](docs/sdk-guide.md) - @agent, @tool, memory, workflows\n- [Examples](./examples/) - 30+ code examples\n\n### For Users (Chat)\n- [Chat Guide](docs/chat-guide.md) - Interactive chat features\n- [Quick Start](docs/quickstart.md) - Get started in 5 minutes\n\n### Integration\n- [MCP Integration](docs/en/guides/claude-code-mcp-setup.md) - Claude Desktop setup\n- [Testing Guide](docs/en/tutorials/14-testing.md) - Test your agents\n\n---\n\n## \ud83c\udfd7\ufe0f Architecture\n\nBuilt on proven technologies:\n\n- **LLM**: OpenAI SDK (direct) + LiteLLM (100+ providers)\n- **Memory**: ChromaDB (vector storage)\n- **Validation**: Pydantic v2\n- **Testing**: pytest + custom framework\n- **Type Safety**: pyright strict mode\n\n**Quality Metrics**:\n- 1,300+ tests (90%+ coverage)\n- 100% typed\n- Production-ready\n\n---\n\n## \ud83d\udd27 Development\n\n```bash\n# Setup\ngit clone https://github.com/JFK/kagura-ai.git\ncd kagura-ai\nuv sync --all-extras\n\n# Test\npytest -n auto\n\n# Type check\npyright src/kagura/\n\n# Lint\nruff check src/\n```\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md) for details.\n\n---\n\n## \ud83d\uddfa\ufe0f Roadmap\n\n### Recently Released (v2.7.x)\n- \u2705 Streaming support (90% faster UX)\n- \u2705 User config system (`kagura init`)\n- \u2705 Personal tools (news, weather, recipes, events)\n- \u2705 MCP full integration (15 built-in tools)\n- \u2705 Context compression (handle 10,000+ messages)\n\n### Coming in v3.0\n- \ud83d\udd04 Documentation refresh (SDK-first)\n- \ud83d\udd04 Enhanced Meta Agent (`/create` in chat)\n- \ud83d\udd04 Cost visibility (`/stats` in chat)\n\n### Future (v3.1+)\n- \ud83d\udd2e Auto-discovery & intent detection\n- \ud83d\udd2e Voice interface\n- \ud83d\udd2e Google Workspace integration\n\n---\n\n## \ud83d\udcc4 License\n\nApache License 2.0 - see [LICENSE](./LICENSE)\n\n---\n\n## \ud83c\udf38 About the Name\n\n\"Kagura (\u795e\u697d)\" is traditional Japanese performing art embodying harmony and creativity - principles at the heart of this SDK.\n\n---\n\n**Built with \u2764\ufe0f for developers who want type-safe AI**\n\n[GitHub](https://github.com/JFK/kagura-ai) \u2022 [PyPI](https://pypi.org/project/kagura-ai/) \u2022 [Documentation](https://www.kagura-ai.com/)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Python-First AI Agent SDK - Build production AI with one decorator",
    "version": "3.0.8",
    "project_urls": null,
    "split_keywords": [
        "ai",
        " sdk",
        " agents",
        " llm",
        " type-safe",
        " production-ready",
        " openai",
        " anthropic",
        " gemini",
        " pydantic",
        " async"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5e8c7b32c4d02865a20de9011a15ad7511a0e8e217ad65f163be9a213f9b0b80",
                "md5": "e53b8d404533c95c3b4445ca1cc4f22c",
                "sha256": "592384f298144595f8dacb2a2771b295f9ac699a5702f475da8d6a7105916c5a"
            },
            "downloads": -1,
            "filename": "kagura_ai-3.0.8-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e53b8d404533c95c3b4445ca1cc4f22c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 240959,
            "upload_time": "2025-10-22T16:27:30",
            "upload_time_iso_8601": "2025-10-22T16:27:30.782096Z",
            "url": "https://files.pythonhosted.org/packages/5e/8c/7b32c4d02865a20de9011a15ad7511a0e8e217ad65f163be9a213f9b0b80/kagura_ai-3.0.8-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "08d288b55017c2d6a4c6ed3ee8bdc6395e15982835c5e9a0d8c2c349623884cc",
                "md5": "b3eadbdb44395335a23fafd0e1b5ac8b",
                "sha256": "8332cf4bda8a9d4e6d14533a9919a02b341e70717c474e3f5ee5a2505661fa78"
            },
            "downloads": -1,
            "filename": "kagura-ai-3.0.8.tar.gz",
            "has_sig": false,
            "md5_digest": "b3eadbdb44395335a23fafd0e1b5ac8b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 205179,
            "upload_time": "2025-10-22T16:27:32",
            "upload_time_iso_8601": "2025-10-22T16:27:32.365295Z",
            "url": "https://files.pythonhosted.org/packages/08/d2/88b55017c2d6a4c6ed3ee8bdc6395e15982835c5e9a0d8c2c349623884cc/kagura-ai-3.0.8.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-22 16:27:32",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "kagura-ai"
}
        
Elapsed time: 2.04200s