README.md

# bananaproai-com

A helpful Elixir library for interacting with the Banana Pro AI inference platform. This package provides a streamlined interface for building and deploying machine learning models with ease.

## Installation

To install `bananaproai-com`, add it as a dependency to your `mix.exs` file:
elixir
def deps do
  [
    {:bananaproai_com, "~> 0.1.0"} # Replace with the latest version
  ]
end

Then, run `mix deps.get` to fetch the dependency.

## Usage

Before using the library, configure your API key. You can set it via application configuration:
elixir
config :bananaproai_com,
  api_key: "YOUR_API_KEY"

Or, set it as an environment variable `BANANA_API_KEY`.

Here are some examples of how to use the `bananaproai-com` library:

**1. Invoking a model with input data:**
elixir
alias BananaProAI.Client

input_data = %{
  "prompt" => "Generate a picture of a cat wearing a hat"
}

case Client.call("your-model-id", input_data) do
  {:ok, response} ->
    IO.inspect(response) # Inspect the API response
  {:error, error} ->
    IO.puts("Error: #{error}")
end

**2. Handling different response types:**
elixir
alias BananaProAI.Client

input_data = %{
  "text" => "Translate to French: Hello world!"
}

case Client.call("translation-model", input_data) do
  {:ok, %{"text" => translated_text}} ->
    IO.puts("Translation: #{translated_text}")
  {:ok, response} ->
    IO.puts("Unexpected response: #{inspect(response)}")
  {:error, error} ->
    IO.puts("Error: #{error}")
end

**3. Using `with` for cleaner error handling:**
elixir
alias BananaProAI.Client

input_data = %{
  "image_url" => "https://example.com/image.jpg"
}

with {:ok, response} <- Client.call("image-processing-model", input_data),
     {:ok, image_data} <- Map.fetch(response, "processed_image") do
  IO.puts("Processed image data: #{image_data}")
else
  {:error, error} ->
    IO.puts("Error: #{error}")
  _ ->
    IO.puts("Unexpected error occurred.")
end

**4. Passing parameters and processing results within a pipe:**
elixir
alias BananaProAI.Client

input_data = %{
  "input_string" => "This is a test."
}

input_data
|> Client.call("string-analysis-model")
|> case do
  {:ok, %{"sentiment" => sentiment}} ->
    IO.puts("Sentiment: #{sentiment}")
  {:ok, response} ->
    IO.puts("Unexpected response: #{inspect(response)}")
  {:error, error} ->
    IO.puts("Error: #{error}")
end

**5. Handling asynchronous calls (if the API supports it):**
elixir
alias BananaProAI.Client

input_data = %{
  "complex_task" => "Do something computationally intensive"
}

case Client.call("long-running-model", input_data, async: true) do
  {:ok, %{"task_id" => task_id}} ->
    IO.puts("Task submitted. Task ID: #{task_id}")
    # Poll the API later using the task_id to get the result
  {:error, error} ->
    IO.puts("Error: #{error}")
end

## Features

*   Easy integration with the Banana Pro AI platform.
*   Simple function calls to run your models.
*   Robust error handling.
*   Support for synchronous and asynchronous calls.
*   Flexible input and output data structures.

## License

MIT

This package is part of the bananaproai-com ecosystem. For advanced features and enterprise-grade tools, visit: https://bananaproai.com/