๐Ÿ“ฆ google-gemini / genai-processors

GenAI Processors is a lightweight Python library that enables efficient, parallel content processing.

โ˜… 2.0k stars โ‘‚ 206 forks ๐Ÿ‘ 2.0k watching โš–๏ธ Apache License 2.0
agentaiasynciogeminigenaigenerative-ailanguage-modelmultimodalpythonrealtime
๐Ÿ“ฅ Clone https://github.com/google-gemini/genai-processors.git
HTTPS git clone https://github.com/google-gemini/genai-processors.git
SSH git clone git@github.com:google-gemini/genai-processors.git
CLI gh repo clone google-gemini/genai-processors
GDM AI Platform FTEs GDM AI Platform FTEs Set correct mime type when ProcessorPart is constructed from a genai_part.Part that contains function call or response. e197be9 4 days ago ๐Ÿ“ History
๐Ÿ“‚ main View all commits โ†’
๐Ÿ“ .github
๐Ÿ“ examples
๐Ÿ“ genai_processors
๐Ÿ“ notebooks
๐Ÿ“„ .gitignore
๐Ÿ“„ CONTRIBUTING.md
๐Ÿ“„ LICENSE
๐Ÿ“„ pyproject.toml
๐Ÿ“„ README.md
๐Ÿ“„ README.pypi.md
๐Ÿ“„ README.md

GenAI Processors Library ๐Ÿ“š

License PyPI version

Build Modular, Asynchronous, and Composable AI Pipelines for Generative AI.

GenAI Processors is a lightweight Python library that enables efficient, parallel content processing.

At the core of the GenAI Processors library lies the concept of a Processor. A Processor encapsulates a unit of work with a simple API: it takes a stream of ProcessorParts (i.e. a data part representing a text, image, etc.) as input and returns a stream of ProcessorParts (or compatible types) as output.

# Any class inheriting from processor.Processor and
# implementing this function is a processor.
async def call(
  content: AsyncIterable[ProcessorPart]
) -> AsyncIterable[ProcessorPartTypes]

You can apply a Processor to any input stream and easily iterate through its output stream:

from genai_processors import content_api
from genai_processors import streams

# Create an input stream (strings are automatically cast into Parts).
input_parts = ["Hello", content_api.ProcessorPart("World")]
input_stream = streams.stream_content(input_parts)

# Apply a processor to a stream of parts and iterate over the result
async for part in simple_text_processor(input_stream):
  print(part.text)
...

The concept of Processor provides a common abstraction for Gemini model calls and increasingly complex behaviors built around them, accommodating both turn-based interactions and live streaming.

โœจ Key Features

  • Modular: Breaks down complex tasks into reusable Processor and
PartProcessor units, which are easily chained (+) or parallelized (//) to create sophisticated data flows and agentic behaviors.
  • Integrated with GenAI API: Includes ready-to-use processors like
GenaiModel for turn-based API calls and LiveProcessor for real-time streaming interactions.
  • Extensible: Lets you create custom processors by inheriting from base
classes or using simple function decorators.
  • Rich Content Handling:
  • ProcessorPart: A wrapper around genai.types.Part enriched with
metadata like MIME type, role, and custom attributes.
  • Supports various content types (text, images, audio, custom JSON).
  • Asynchronous & Concurrent: Built on Python's familiar asyncio
framework to orchestrate concurrent tasks (including network I/O and communication with compute-heavy subthreads).
  • Stream Management: Has utilities for splitting, concatenating, and
merging asynchronous streams of ProcessorParts.

๐Ÿ“ฆ Installation

The GenAI Processors library requires Python 3.10+.

Install it with:

pip install genai-processors

๐Ÿš€ Getting Started

Check the following colabs to get familiar with GenAI processors (we recommend following them in order):

explains the basics of ProcessorPart, ProcessorContent, and how to create them. an introduction to the core concepts of GenAI Processors. a walkthrough of the typical steps to create a Processor or a PartProcessor. a couple of examples of real-time processors built from the Gemini Live API using the LiveProcessor class.

๐Ÿ“– Examples

Explore the examples/ directory for practical demonstrations:

Audio-out Live agent with google search as a tool. It is a client-side implementation of a Live processor (built with text-based Gemini API models) that demonstrates the streaming and orchestration capabilities of GenAI Processors. built with Processors, comprising 3 sub-processors, chaining, creating ProcessorParts, etc. commentary agent built with the Gemini Live API, composed of two agents: one for event detection and one for managing the conversation.

๐Ÿงฉ Built-in Processors

The core/ directory contains a set of basic processors that you can leverage in your own applications. It includes the generic building blocks needed for most real-time applications and will evolve over time to include more core components.

Community contributions expanding the set of built-in processors are located under contrib/ - see the section below on how to add code to the GenAI Processor library.

๐Ÿค Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines on how to contribute to this project.

๐Ÿ“œ License

This project is licensed under the Apache License, Version 2.0. See the LICENSE file for details.

Gemini Terms of Services

If you make use of Gemini via the Genai Processors framework, please ensure you review the Terms of Service.