OramaSearch Inc. LogoOramaCore

Getting Started

Getting started with OramaCore - a complex AI architecture made easy and open-source.

Building AI projects like search engines or copilots is harder than it should be, requiring vector databases, LLMs, chunking, and seamless integration while handling network slowdowns and performance issues. OramaCore simplifies this with a unified, opinionated server for easier development and customization.

Quick Start

OramaCore gives you everything you need in a single Dockerfile.

Just pull it from DockerHub:

docker pull oramasearch/oramacore:latest

You're getting acces to:

Search engine

A powerful, low-latency search engine with built-in support for >30 languages.

Vector database

A complete vector database with automatic chunking and automatic embeddings generation.

Small, fine tuned language models

An array of small, fine-tuned language models that can handle all sorts of operations on your data, from translating natural language queries into optimized OramaCore queries to running custom agents.

A JavaScript runtime

A fast, integrated, fully functional JavaScript runtime (powered by Deno) so you can write custom agents and business logic in plain JavaScript.

All from a single, self-contained image.

To run the image, you can use the following command:

docker run \
  -p 8080:8080 \
  -v ${HOME}/.cache/huggingface:/root/.cache/huggingface \
  -v ./config.yaml:/app/config.yaml \
  --gpus all \
  oramacore

Configuration

To get started with OramaCore, you can use the default configuration. But if you want to customize it, you can do so by editing the config.toml file. You can customize the system to fit your specific needs. Check out the configuration guide to learn more.

Create a collection

To import data into OramaCore, you need to create a collection. A collection is a group of documents that you can search and interact with. You can create a collection by sending a POST request to the /collections endpoint with the collection name and the API Keys to secure it. The request should include an Authorization header with the master API key. Learn more about API Keys.

curl -X POST \
  http://localhost:8080/v1/collections/create \
  -H 'Authorization: Bearer <master-api-key>' \
  -d '{
    "id": "products",
    "write_api_key": "my-write-api-key",
    "read_api_key": "my-read-api-key"
  }'

Add documents

Once you have created a collection, you can add documents to it. A document is a JSON object that contains the data you want to search. You can add a document by sending a POST request to the /collections/:collection_id/documents endpoint with the document data.

curl -X POST \
  http://localhost:8080/v1/collections/{COLLECTION_ID}/insert \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <write_api_key>' \
  -d '[{
    "title": "My first document",
    "content": "This is the content of my first document."
  }]'

You can explore more about documents and how to insert documents into a collection.

Now that you have added documents to your collection, you can perform your first search query using the /search endpoint. You can send a POST request to the /search endpoint with the search query and the collection ID to get the results.

curl -X POST \
  http://localhost:8080/v1/collections/{COLLECTION_ID}/search?api-key=<read_api_key> \
  -H 'Content-Type: application/json' \
  -d '{ "term": "The quick brown fox" }'

You can now perform unlimited, fast searches on your data using OramaCore! Check out the supported Search Parameters to learn more about how to customize your search queries results.

Out of the box, OramaCore is ready to go with a powerful search engine, featuring Full Text search, Vector Search and Hybrid Search. You can start building your AI projects right away! 🚀


Why OramaCore?

Building search engines, copilots, answer systems, or pretty much any AI project is pretty challenging. Even in the simplest cases, you'll need a vector database, a connection to an LLM for generating embeddings, a solid chunking mechanism, and another LLM to generate answers. And that's without even considering your specific needs, where all these pieces need to work together in a way that's unique to your use case.

On top of that, you're likely forced to add multiple layers of network-based communication, deal with third-party slowdowns beyond your control, and address all the typical challenges we consider when building high-performance, high-quality applications.

OramaCore simplifies the chaos of setting up and maintaining a complex architecture. It gives you a single, easy-to-use, opinionated server that's designed to help you create tailored solutions for your own unique challenges.

Philosophy

When building OramaCore, we made a deliberate choice to create an opinionated system. We offer strong, general-purpose default configurations while still giving you the flexibility to customize them as needed.

There are plenty of great vector databases and full-text search engines out there. But most of them don't work seamlessly together out of the box—they often require extensive fine-tuning to arrive at a functional solution.

Our goal is to provide you with a platform that's ready to go the moment you pull a single Docker file.

OramaCore APIs

The one imperative we have when designing the OramaCore APIs is to make them as simple as possible. We want to make it easy for developers to get started with OramaCore, and to make it easy for them to build applications that use OramaCore.

Any additional steps, any additional complexity, any additional boilerplate, is a failure on our part. We want to make it as easy as possible for you to use OramaCore.

If you think we should improve on this front, please let us know at info@orama.com. We are always looking for feedback.

On this page