Welcome to Jina!#

Jina is a MLOps framework that empowers anyone to build multimodal AI services via cloud native technologies. It uplifts a local PoC into a production-ready service. Jina handles the infrastructure complexity, making advanced solution engineering and cloud-native technologies accessible to every developer.

Applications built with Jina enjoy the following features out of the box:

🌌 Universal

  • Build applications that deliver fresh insights from multiple data types such as text, image, audio, video, 3D mesh, PDF with LF’s DocArray.

  • Support all mainstream deep learning frameworks.

  • Polyglot gateway that supports gRPC, Websockets, HTTP, GraphQL protocols with TLS.

Performance

  • Intuitive design pattern for high-performance microservices.

  • Scaling at ease: set replicas, sharding in one line.

  • Duplex streaming between client and server.

  • Async and non-blocking data processing over dynamic flows.

☁️ Cloud native

  • Seamless Docker container integration: sharing, exploring, sandboxing, versioning and dependency control via Executor Hub.

  • Full observability via OpenTelemetry, Prometheus and Grafana.

  • Fast deployment to Kubernetes, Docker Compose.

🍱 Ecosystem

  • Improved engineering efficiency thanks to the Jina AI ecosystem, so you can focus on innovating with the data applications you build.

  • Free CPU/GPU hosting via Jina AI Cloud.

Install#

Make sure that you have Python 3.7+ installed on Linux/MacOS/Windows.

pip install -U jina
conda install jina -c conda-forge
docker pull jinaai/jina:latest

Now that you’re set up, let’s create a project:

jina new hello-jina && jina flow --uses hello-jina/flow.yml
docker run jinaai/jina:latest -v "$(pwd)/j:/j" new hello-jina
docker run -v "$(pwd)/j:/j" -p 54321:54321 jinaai/jina:latest flow --uses /j/hello-jina/flow.yml

Run the client on your machine and observe the results from your terminal.

from jina import Client, DocumentArray

c = Client(host='grpc://0.0.0.0:54321')
da = c.post('/', DocumentArray.empty(2))
print(da.texts)
from jina import Client, DocumentArray

c = Client(host='http://0.0.0.0:54322')
da = c.post('/', DocumentArray.empty(2))
print(da.texts)
from jina import Client, DocumentArray

c = Client(host='ws://0.0.0.0:54323')
da = c.post('/', DocumentArray.empty(2))
print(da.texts)
fetch('http://localhost:54322/post', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    body: {}
}).then(response => response.json()).then(data => console.log(data));
curl --request POST 'http://localhost:54323/post' --header 'Content-Type: application/json' -d '{}'

Next steps#

Learn DocArray API

DocArray is the foundational data structure of Jina. Before starting Jina, first learn DocArray to quickly build a PoC.

Learn Executor

Executor is a self-contained logic unit that performs a group of tasks on a DocumentArray.

Learn Flow

Flow orchestrates Executors into a processing pipeline to accomplish a task.

Explore Executor Hub

Executor Hub is a marketplace that allows you to share, explore and test Executors.

Deploy a Flow to Cloud

Jina AI Cloud is the MLOps platform for hosting Jina projects.

Support#

Join Us#

Jina is backed by Jina AI and licensed under Apache-2.0.


Index | Module Index