genai - Multiprovider Generative AI Client
Currently supports natively: Ollama, OpenAI, Anthropic, Cohere (more to come)
# cargo.toml
= {'=0.0.7'}
The goal of this library is to provide a common and ergonomic single API to many generative AI providers, such as OpenAI and Ollama.
-
IMPORTANT 1
0.0.xis still in heavy development. Cherry-pick code, don't depend on it. (It's starting to work pretty well though) -
IMPORTANT 2
0.1.xwill still have some breaking changes in patches, so make sure to lock your version, e.g.,genai = "=0.1.0". In short,0.1.xcan be considered "beta releases." -
IMPORTANT 3 This is NOT intended to be a replacement for async-openai and ollama-rs, but rather to tackle the simpler lowest common denominator of chat generation use cases, where API depth is less a priority than API commonality.
Library Focus:
-
Focuses on standardizing chat completion APIs across major AI Providers.
-
Native implementation, meaning no per-provider SDKs.
- Reason: While there are some variations between all of the various APIs, they all follow the same pattern and high-level flow and constructs. Managing the differences at a lower layer is actually simpler and more cumulative accross services than doing sdks gymnastic.
-
Prioritizes ergonomics and commonality, with depth being secondary. (If you require complete client API, consider using async-openai and ollama-rs; they are both excellent and easy to use.)
-
Initially, this library will mostly focus on text chat API (images, or even function calling in the first stage).
-
The
0.1.xversion will work, but the APIs will change in the patch version, not following semver strictly. -
Version
0.2.xwill follow semver more strictly.
Example
// For examples support funtions
use crate;
use ;
use Client;
const MODEL_OPENAI: &str = "gpt-3.5-turbo";
const MODEL_ANTHROPIC: &str = "claude-3-haiku-20240307";
const MODEL_COHERE: &str = "command-light"; // see: https://docs.cohere.com/docs/models
const MODEL_OLLAMA: &str = "mixtral";
const MODEL_AND_KEY_ENV_NAME_LIST: & = &;
// NOTE: for now, Client Adapter/Provider mapping rule
// - starts_with "gpt" -> OpenAI
// - starts_with "claude" -> Anthropic
// - starts_with "command" -> Cohere
// - For anything else -> Ollama
// Refined mapping rules will be added later and extended as provider support grows.
async
Running the examples
Here are some quick dev commands.
Requirements:
- For Ollama: Ollama server running, with the
mixtralmodel (or change the model in the file) - To have the openai run, have
OPENAI_API_KEYset. - To have the anthropic run, have
ANTHROPIC_API_KEYset.
# cargo watch (cargo install cargo-watch)
Notes on Possible Direction
-
Will add more data on ChatResponse and ChatStream, especially metadata about usage.
-
Add vision/image support to the chat messages and responses
-
Add function calling support to the chat messages and responses
-
Add Google Gemini (note: Seems that gemini endpoints is diffferent than the google vertex AI as only the later seems to support Function & Instruction.)
-
Add the AWS Berock variants (e.g., Mistral, and Anthropic). Most of the work will be on "interesting" token signature scheme (without having to drag big SDKs, might be below feature)
Links
- crates.io: crates.io/crates/genai
- GitHub: github.com/jeremychone/rust-genai