From 887c2952af92760f77465cf3f9a05ff93d87b58a Mon Sep 17 00:00:00 2001 From: Fausto Quaggia Date: Mon, 3 Feb 2025 19:47:48 +0100 Subject: [PATCH 1/2] docs: contents architecture --- docs/app/icon.png | Bin 0 -> 78204 bytes docs/content/docs/apis/introduction.mdx | 10 +- docs/content/docs/apis/meta.json | 2 +- .../overview.mdx} | 4 +- .../docs/{ => architecture}/party-planner.mdx | 0 docs/content/docs/architecture/write-read.mdx | 38 ++++++ .../javascript-hooks/introduction.mdx | 0 .../javascript-hooks/meta.json | 0 .../selectEmbeddingProperties.mdx | 0 .../{ => customizations}/text-embeddings.mdx | 2 +- docs/content/docs/{ => guide}/api-key.mdx | 2 +- .../docs/{ => guide}/configuration.mdx | 7 +- .../installation.mdx} | 11 +- docs/content/docs/index.mdx | 112 ++++++++++++------ docs/content/docs/meta.json | 14 +-- 15 files changed, 136 insertions(+), 66 deletions(-) create mode 100644 docs/app/icon.png rename docs/content/docs/{architecture.mdx => architecture/overview.mdx} (99%) rename docs/content/docs/{ => architecture}/party-planner.mdx (100%) create mode 100644 docs/content/docs/architecture/write-read.mdx rename docs/content/docs/{ => customizations}/javascript-hooks/introduction.mdx (100%) rename docs/content/docs/{ => customizations}/javascript-hooks/meta.json (100%) rename docs/content/docs/{ => customizations}/javascript-hooks/selectEmbeddingProperties.mdx (100%) rename docs/content/docs/{ => customizations}/text-embeddings.mdx (98%) rename docs/content/docs/{ => guide}/api-key.mdx (95%) rename docs/content/docs/{ => guide}/configuration.mdx (96%) rename docs/content/docs/{running-oramacore.mdx => guide/installation.mdx} (94%) diff --git a/docs/app/icon.png b/docs/app/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..65b5b060eb6e1c9a10c0d4616d368b3b39f851da GIT binary patch literal 78204 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

P|`N8e&uC4o zADdWrMVTJI=|5o1 zAEv>YF{oY*}7tKMZPp(W8 zVFQ=-JQKjYS))rFL?&}n)$S762I=70A-wml!h#LE1uFQSy!U%g7#EHRzmP3{tBw`C zCUc9L-KaMblo1)-2@saSB;Lu{MM=vrQ538fhpRPGl68NH-goid@8h)U!a;<0FSe>o zAK3L_K7gYVyoo)JiO>|Te<#`4U_khtz}CDOy!CX%D00|hzow1u{oY|27gsRqkKU9G zz9KX+y*Uox%tbdS&!F4mse%<-qv)amwjTnrYX-LkT!nnHY$JR@6-< zON`&}TO7cxCmZb1Wn8#h6nWqRdb&e5oAhH~=CWJ!{oYxt{<5waMR+eniwYgTVS)b0 z4~A4Sxh8O#*(JlJ%#oUK_CcGf$;>VM&`Qxgc<=Y|Fn)FFLZ&Vn?AD~It`gB{7QYbA z)E0uaB%IhrS`+s^){^tLa(&>7_eS@A?-%3Z__$O*o=mhWIvv6XNN;Az)||NTb{RIA z8GJ%!>l`2K`aIb9qLws8f2`O{T=;i%@4drU1_xo_Yx?JuL!prn))y64=bF%8d5nX>mza*~U7qlO= zbCX@vtZ{O{Mn4S0g&ZFqWB5k*ejg9xdJKm?UDO#|dnP{-Vx%|dKyXnvaCBjlNvO#q za*)^PP|97a$P808NmM17N#9$w{l0wo`?%1N>|VZw>>lziP0iY(BgC74UlWB6F4#RZ?^1@B zv6ga9)^6z61palSd%us3@y9?8dNSki0wkB3YSbILHc>Je(a-&EeRvJ;rZ11EY?=KU z(Nw>E*kkv8|4_4zSMbXhT`}06VW~E#;hO8xuz*X}Y*82O7Bf|8@@`=^_(3V7cXaR4 zz2Co9$N}M1b5qI7C1O;_wR1j z6-^aW4;bRfaa=Q9G|`1fs`F@YZ*$%zn((2R?6B!3d+Ofr-(Rh(i?}Y~sS`NpzX{q( zEQ&X83@!?mY@O0fC^i^z-b_6BR4=-x?)^SNxBd;}^4O&dhMT1A9?TJ(x#%`Kc*T#+ zyOXuZ(gzdMVJC(nzIHEVt4E=Qkx3PmV->(_L z=rw-_rcKnK@1}ge{bnft`tp4AK_g#PBR83sZ)2(&XAkOrePesS{Z{7kmlUW~GFdZ` zMcAB6LT*B9bKkJZ*`@8Ce82tP66T~hX;8jZGd{SJrPgd7$~Uz4+wU!5ZgGyga%KI{ zw5E)BsjLK-vB+fLADb&)}Dbsu7M3u?=7P0qc$H{r3Co zMg0fZU(}-A7_p^DZ2f1g{)Xxe>;3k7hiL!r|9;~Aj`^QYxw74R?$>w!d%q$2zm4gC a>is`KGq;oY32#pT0000 OramaCore is currently under active development. Our goal is to release the first Beta version (**v0.1.0**) on **Jan 31st, 2025**, and the first stable version (**v1.0.0**) on **Feb 28th, 2025**. While the system is already quite stable, please note that APIs will undergo changes in **v0.1.0** and **v1.0.0**. + ## Configuring OramaCore @@ -84,7 +85,7 @@ The `writer_side` section configures the writer side of OramaCore. Here are the - `data_dir`: The directory where the writer side will persist the data on disk. By default, it's set to `./.data/writer`. - `embedding_queue_limit`: The maximum number of embeddings that can be stored in the queue before the writer starts to be blocked. By default, it's set to `50000`. - `insert_batch_commit_size`: The number of document insertions after which the write side will commit the changes. By default, it's set to `5000`. - - `default_embedding_model`: The default embedding model used to calculate the embeddings if not specified in the collection creation. By default, it's set to `MultilingualE5Small`. See more about the available models in the [Embedding Models](/docs/getting-started/text-embeddings) section. + - `default_embedding_model`: The default embedding model used to calculate the embeddings if not specified in the collection creation. By default, it's set to `MultilingualE5Small`. See more about the available models in the [Embedding Models](/docs/customizations/text-embeddings) section. ## `reader_side` @@ -108,7 +109,7 @@ The `ai_server` section configures the Python gRPC server that is responsible fo The `embeddings` section configures the embeddings calculation. Here are the available options: -- `default_model_group`: The default model group used to calculate the embeddings if not specified in the collection creation. By default, it's set to `multilingual`. See more about the available models in the [Embedding Models](/docs/getting-started/text-embeddings) section. +- `default_model_group`: The default model group used to calculate the embeddings if not specified in the collection creation. By default, it's set to `multilingual`. See more about the available models in the [Embedding Models](/docs/customizations/text-embeddings) section. - `dynamically_load_models`: Whether to dynamically load the models. By default, it's set to `false`. - `execution_providers`: The execution providers used to calculate the embeddings. By default, it's set to `CUDAExecutionProvider` and `CPUExecutionProvider`. - `total_threads`: The total number of threads used to calculate the embeddings. By default, it's set to `8`. diff --git a/docs/content/docs/running-oramacore.mdx b/docs/content/docs/guide/installation.mdx similarity index 94% rename from docs/content/docs/running-oramacore.mdx rename to docs/content/docs/guide/installation.mdx index 8c082c1..e9c0f5c 100644 --- a/docs/content/docs/running-oramacore.mdx +++ b/docs/content/docs/guide/installation.mdx @@ -1,12 +1,13 @@ --- -title: Running OramaCore -description: "Downloading, building, and running OramaCore on your machine or in production. " -icon: Play +title: Install OramaCore +description: "Downloading, building, and running OramaCore on your machine or in production." --- + OramaCore is currently under active development. Our goal is to release the first Beta version (**v0.1.0**) on **Jan 31st, 2025**, and the first stable version (**v1.0.0**) on **Feb 28th, 2025**. While the system is already quite stable, please note that APIs will undergo changes in **v0.1.0** and **v1.0.0**. + ## Using Docker @@ -16,7 +17,7 @@ The simplest way to get started is by pulling the official Docker image from Doc docker pull oramasearch/oramacore:latest ``` -Create a [config.yaml configuration file](/docs/getting-started/configuration) and then run the Docker image: +Create a [config.yaml configuration file](/docs/guide/configuration) and then run the Docker image: ```sh docker run \ @@ -91,7 +92,7 @@ Then, install the dependencies: pip install -r requirements.txt # or pip install -r requirements-cpu.txt ``` -When you run the server, OramaCore will automatically download the required models specified in the [configuration file](/docs/getting-started/configuration). +When you run the server, OramaCore will automatically download the required models specified in the [configuration file](/docs/guide/configuration). The download time will depend on your internet connection. diff --git a/docs/content/docs/index.mdx b/docs/content/docs/index.mdx index 04d4fe0..31b11a7 100644 --- a/docs/content/docs/index.mdx +++ b/docs/content/docs/index.mdx @@ -1,21 +1,14 @@ --- -title: Introduction -description: An introduction to OramaCore - a complex AI architecture made easy and open-source. -icon: Album +title: Getting Started +description: Getting started with OramaCore - a complex AI architecture made easy and open-source. --- import { File, Folder, Files } from 'fumadocs-ui/components/files'; import { SearchIcon, DatabaseIcon, WholeWordIcon, FileJson } from 'lucide-react'; -Building search engines, copilots, answer systems, or pretty much any AI project is harder than it should be. -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. +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. -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. - -## Why OramaCore +## Quick Start OramaCore gives you everything you need **in a single Dockerfile**. @@ -45,48 +38,95 @@ You're getting acces to: -All from a single, self-contained image. +All from a single, self-contained image. -## On being opinionated +To run the image, you can use the following command: -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. +```sh +docker run \ + -p 8080:8080 \ + -v ${HOME}/.cache/huggingface:/root/.cache/huggingface \ + -v ./config.yaml:/app/config.yaml \ + --gpus all \ + oramacore +``` -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. +### Configuration -Our goal is to provide you with a platform that's ready to go the moment you pull a single Docker file. +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](/docs/guide/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](/docs/guide/api-keys). + +```sh +curl -X POST \ + http://localhost:8080/v0/collections \ + -H 'Authorization: Bearer ' \ + -d '{ + "id": "products", + "write_api_key": "my-write-api-key", + "read_api_key": "my-read-api-key" + }' +``` -## Write Side, Read Side +### Add documents -OramaCore is a modular system. We allow it to run as a monolith - where all the components are running in a single process - or as a distributed system, where you can scale each component independently. +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. -To allow this, we split the system into two distinct sides: the **write side** and the **read side**. +```sh +curl -X PATCH \ + http://localhost:8080/v0/collections/{COLLECTION_ID}/documents \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer ' \ + -d '{ + "id": "1", + "title": "My first document", + "content": "The quick brown fox jumps over the lazy dog." + }' +``` +You can explore more about [documents](/docs/apis/insert-documents) and how to insert documents into a collection. -If you're running OramaCore in a single node, you won't notice the difference. But if you're running it in a distributed system, you can scale the write side independently from the read side. +### Search -### Write Side +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. + +```sh +curl -X POST \ + http://localhost:8080/v0/collections/{COLLECTION_ID}/search?api-key= \ + -H 'Content-Type: application/json' \ + -d '{ "term": "The quick brown fox" }' +``` -The write side is responsible for ingesting data, generating embeddings, and storing them in the vector database. It's also responsible for generating the full-text search index. +You can now perform unlimited, fast searches on your data using OramaCore! Check out the supported [Search Parameters](/docs/apis/search-documents#search-parameters) to learn more about how to customize your search queries results. -It's the part of the system that requires the most GPU power and memory, as it need to generate a lot of content, embeddings, and indexes. +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! 🚀 -In detail, the write side is responsible for: +## Why OramaCore? -- **Ingesting data**. It creates a buffer of documents and flushes them to the vector database and the full-text search index, rebuilding the immutable data structures used for search. -- **Generating embeddings**. It generates text embeddings for large datasets without interfering with the search performance. -- **Expanding content (coming soon)**. It is capable of reading images, code blocks, and other types of content, and generating descriptions and metadata for them. +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. -Every insertion, deletion, or update of a document will be handled by the write side. +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. -### Read Side +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. -The read side is responsible for handling queries, searching for documents, and returning the results to the user. +### OramaCore APIs -It's also the home of the Answer Engine, which is responsible for generating answers to questions and performing chain of actions based on the user's input. +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. -In detail, the read side is responsible for: +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. -- **Handling queries**. It receives the user's query, translates it into a query that the vector database can understand, and returns the results. -- **Searching for documents**. It searches for documents in the full-text search index and the vector database. -- **Answer Engine**. It generates answers to questions, performs chain of actions, and runs custom agents. +If you think we should improve on this front, please let us know at [info@orama.com](mailto:info@orama.com). We are always looking for feedback. -Every query, question, or action will be handled by the read side. diff --git a/docs/content/docs/meta.json b/docs/content/docs/meta.json index d2a87a3..55bf3d2 100644 --- a/docs/content/docs/meta.json +++ b/docs/content/docs/meta.json @@ -3,17 +3,15 @@ "description": "OramaCore Documentation", "root": true, "pages": [ - "---Getting Started---", + "---Guide---", "index", - "api-key", - "configuration", - "running-oramacore", + "...guide", "apis", "---Customizations---", - "text-embeddings", - "javascript-hooks", + "...customizations", "---Architecture---", - "architecture", - "party-planner" + "architecture/overview", + "architecture/write-read", + "architecture/party-planner" ] } \ No newline at end of file From 52447a6aae78543a12f3dcdca0eefb0615452f67 Mon Sep 17 00:00:00 2001 From: Fausto Quaggia Date: Mon, 3 Feb 2025 19:54:42 +0100 Subject: [PATCH 2/2] docs: add horizontal separator --- docs/content/docs/index.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/content/docs/index.mdx b/docs/content/docs/index.mdx index 31b11a7..9212970 100644 --- a/docs/content/docs/index.mdx +++ b/docs/content/docs/index.mdx @@ -104,6 +104,8 @@ You can now perform unlimited, fast searches on your data using OramaCore! Check 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.