Metadata-Version: 2.4
Name: genkit-plugin-django
Version: 0.7.0
Summary: Genkit Django Plugin
Project-URL: Bug Tracker, https://github.com/genkit-ai/genkit/issues
Project-URL: Changelog, https://github.com/genkit-ai/genkit/blob/main/py/plugins/django/CHANGELOG.md
Project-URL: Documentation, https://firebase.google.com/docs/genkit
Project-URL: Homepage, https://github.com/genkit-ai/genkit
Project-URL: Repository, https://github.com/genkit-ai/genkit/tree/main/py
Author: Google
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: ai,artificial-intelligence,async,django,generative-ai,genkit,llm,machine-learning,server,web
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Environment :: Web Environment
Classifier: Framework :: AsyncIO
Classifier: Framework :: Django
Classifier: Framework :: Django :: 4.2
Classifier: Framework :: Django :: 5.0
Classifier: Framework :: Django :: 5.1
Classifier: Framework :: Pydantic
Classifier: Framework :: Pydantic :: 2
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries
Classifier: Typing :: Typed
Requires-Python: >=3.10
Requires-Dist: django>=4.2
Requires-Dist: genkit
Requires-Dist: pydantic>=2.10.5
Description-Content-Type: text/markdown

# Genkit Django Plugin

`genkit-plugin-django` exposes Genkit flows as HTTP endpoints in a Django application. It mirrors `genkit-plugin-flask` and `genkit-plugin-fastapi`: one decorator turns a `@ai.flow()` into a Django view that speaks the Genkit HTTP protocol (JSON envelope, optional SSE streaming, structured error responses).

## Install

```bash
pip install genkit-plugin-django
```

## Usage

```python
# myapp/views.py
from genkit import Genkit
from genkit.plugins.django import genkit_django_handler

ai = Genkit(plugins=[...])


@genkit_django_handler(ai)
@ai.flow()
async def chat(prompt: str) -> str:
    response = await ai.generate(prompt=prompt)
    return response.text
```

```python
# myproject/urls.py
from django.urls import path
from myapp.views import chat

urlpatterns = [
    path('chat/', chat),
]
```

The view requires Django's ASGI server (Django 4.1+):

```bash
uvicorn myproject.asgi:application
```

## Wire protocol

- Body: `{"data": <flow_input>}`. Missing `data` → 400.
- Streaming: `Accept: text/event-stream` or `?stream=true`. Each chunk emits `data: {"message": ...}\n\n`; completion emits `data: {"result": ...}\n\n`; on exception `error: {"error": ...}`.
- Non-stream: `{"result": <flow_output>}` on success; 500 with `HttpErrorWireFormat` JSON on exception.

## Context provider

```python
async def auth(request_data):
    return {'username': request_data.headers.get('authorization')}


@genkit_django_handler(ai, context_provider=auth)
@ai.flow()
async def chat(prompt, ctx):
    user = ctx.context.get('username')
    ...
```
