diff --git a/.gitignore b/.gitignore index 7cf6e79..c0cfb6f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules .docusaurus .DS_Store -.vscode/* \ No newline at end of file +.vscode/* +.codegpt \ No newline at end of file diff --git a/README.md b/README.md index da74402..c4d12c9 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ -# GaiaNet Docs +# Gaia Docs -The documentation is for GaiaNet node operators, users, and creators. +The documentation is for Gaia node operators, users, and creators. ## Contributing We welcome contributions to improve our documentation! Here's how you can contribute: 1. Fork the repository: - - Visit the [GaiaNet docs repository](https://github.com/GaiaNet-AI/docs) on GitHub + - Visit the [Gaia docs repository](https://github.com/GaiaNet-AI/docs) on GitHub - Click the "Fork" button in the top-right corner - Select where you want to fork the repository (your personal account or an organization) 2. Clone your forked repository:` @@ -56,4 +56,4 @@ This documentation is automatically deployed to [docs.gaianet.ai](https://docs.g ## Need Help? If you have any questions or need assistance, please open an issue in this repository or reach out through our community channels. -Thank you for contributing to GaiaNet's documentation! \ No newline at end of file +Thank you for contributing to Gaia's documentation! \ No newline at end of file diff --git a/build/1.0.0/category/agent-frameworks-and-apps/index.html b/build/1.0.0/category/agent-frameworks-and-apps/index.html new file mode 100644 index 0000000..dae5a7d --- /dev/null +++ b/build/1.0.0/category/agent-frameworks-and-apps/index.html @@ -0,0 +1,30 @@ + + + + + +Agent frameworks and apps | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Agent frameworks and apps

How to use a GaiaNet node as the backend service for an agent framework or app, replacing the OpenAI API.

📄️ Obsidian

Obsidian is a note-taking application that enables users to create, link, and visualize ideas directly on their devices. With Obsidian, you can seamlessly sync notes across devices, publish your work, and collaborate with others. The app is highly customizable, allowing users to enhance functionality through a wide range of plugins and themes. Its unique features include a graph view to visualize connections between notes, making it ideal for managing complex information and fostering creativity. Obsidian also emphasizes data privacy by storing notes locally.

+ + \ No newline at end of file diff --git a/build/1.0.0/category/creator-guide/index.html b/build/1.0.0/category/creator-guide/index.html new file mode 100644 index 0000000..570ad35 --- /dev/null +++ b/build/1.0.0/category/creator-guide/index.html @@ -0,0 +1,30 @@ + + + + + +Creator Guide | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Creator Guide

How to finetune your own LLMs and create vector collections based on your own proprietary and private knowledge

+ + \ No newline at end of file diff --git a/build/1.0.0/category/domain-operator-guide/index.html b/build/1.0.0/category/domain-operator-guide/index.html new file mode 100644 index 0000000..173464f --- /dev/null +++ b/build/1.0.0/category/domain-operator-guide/index.html @@ -0,0 +1,30 @@ + + + + + +Domain Operator Guide | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
+ + \ No newline at end of file diff --git a/build/1.0.0/category/gaianet-node-with-finetuned-llms/index.html b/build/1.0.0/category/gaianet-node-with-finetuned-llms/index.html new file mode 100644 index 0000000..3b9be1d --- /dev/null +++ b/build/1.0.0/category/gaianet-node-with-finetuned-llms/index.html @@ -0,0 +1,30 @@ + + + + + +GaiaNet Node with finetuned LLMs | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
+ + \ No newline at end of file diff --git a/build/1.0.0/category/how-do-i-/index.html b/build/1.0.0/category/how-do-i-/index.html new file mode 100644 index 0000000..0e7a2e5 --- /dev/null +++ b/build/1.0.0/category/how-do-i-/index.html @@ -0,0 +1,30 @@ + + + + + +How do I ... | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
+ + \ No newline at end of file diff --git a/build/1.0.0/category/knowledge-bases/index.html b/build/1.0.0/category/knowledge-bases/index.html new file mode 100644 index 0000000..ff503d3 --- /dev/null +++ b/build/1.0.0/category/knowledge-bases/index.html @@ -0,0 +1,30 @@ + + + + + +Knowledge bases | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Knowledge bases

How to create vector collections based on your own proprietary and private knowledge

+ + \ No newline at end of file diff --git a/build/1.0.0/category/node-operator-guide/index.html b/build/1.0.0/category/node-operator-guide/index.html new file mode 100644 index 0000000..e305eb2 --- /dev/null +++ b/build/1.0.0/category/node-operator-guide/index.html @@ -0,0 +1,30 @@ + + + + + +Node Operator Guide | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
+ + \ No newline at end of file diff --git a/build/1.0.0/category/tutorial/index.html b/build/1.0.0/category/tutorial/index.html new file mode 100644 index 0000000..c2e1d93 --- /dev/null +++ b/build/1.0.0/category/tutorial/index.html @@ -0,0 +1,30 @@ + + + + + +Tutorial | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
+ + \ No newline at end of file diff --git a/build/1.0.0/category/user-guide/index.html b/build/1.0.0/category/user-guide/index.html new file mode 100644 index 0000000..c35abbf --- /dev/null +++ b/build/1.0.0/category/user-guide/index.html @@ -0,0 +1,30 @@ + + + + + +User Guide | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
+ + \ No newline at end of file diff --git a/build/1.0.0/creator-guide/finetune/intro/index.html b/build/1.0.0/creator-guide/finetune/intro/index.html new file mode 100644 index 0000000..a476cfc --- /dev/null +++ b/build/1.0.0/creator-guide/finetune/intro/index.html @@ -0,0 +1,43 @@ + + + + + +Fine-tune LLMs | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Fine-tune LLMs

+

You could fine-tune an open-source LLM to

+
    +
  • Teach it to follow conversations.
  • +
  • Teach it to respect and follow instructions.
  • +
  • Make it refuse to answer certain questions.
  • +
  • Give it a specific "speaking" style.
  • +
  • Make it response in certain formats (e.g., JSON).
  • +
  • Give it focus on a specific domain area.
  • +
  • Teach it certain knowledge.
  • +
+

To do that, you need to create a set of question and answer pairs to show the model the prompt and the expected response. +Then, you can use a fine-tuning tool to perform the training and make the model respond the expected answer for +each question.

+ + \ No newline at end of file diff --git a/build/1.0.0/creator-guide/finetune/llamacpp/index.html b/build/1.0.0/creator-guide/finetune/llamacpp/index.html new file mode 100644 index 0000000..19165e5 --- /dev/null +++ b/build/1.0.0/creator-guide/finetune/llamacpp/index.html @@ -0,0 +1,66 @@ + + + + + +llama.cpp | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

llama.cpp

+

The popular llama.cpp tool comes with a finetune utility. It works well on CPUs! This fine-tune guide is reproduced with +permission from Tony Yuan's Finetune an open-source LLM for the chemistry subject project.

+

Build the fine-tune utility from llama.cpp

+

The finetune utility in llama.cpp can work with quantized GGUF files on CPUs, and hence dramatically reducing the hardware requirements and expenses for fine-tuning LLMs.

+

Check out and download the llama.cpp source code.

+
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
+

Build the llama.cpp binary.

+
mkdir build
cd build
cmake ..
cmake --build . --config Release
+

If you have NVIDIA GPU and CUDA toolkit installed, you should build llama.cpp with CUDA support.

+
mkdir build
cd build
cmake .. -DLLAMA_CUBLAS=ON -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc
cmake --build . --config Release
+

Get the base model

+

We are going to use Meta's Llama2 chat 13B model as the base model. Note that we are using a Q5 quantized GGUF model file directly to save computing resources. You can use any of the Llama2 compatible GGUF models on Hugging Face.

+
cd .. # change to the llama.cpp directory
cd models/
curl -LO https://huggingface.co/gaianet/Llama-2-13B-Chat-GGUF/resolve/main/llama-2-13b-chat.Q5_K_M.gguf
+

Create a question and answer set for fine-tuning

+

Next we came up with 1700+ pairs of QAs for the chemistry subject. It is like the following in a CSV file.

+
QuestionAnswer
What is unique about hydrogen?It's the most abundant element in the universe, making up over 75% of all matter.
What is the main component of Jupiter?Hydrogen is the main component of Jupiter and the other gas giant planets.
Can hydrogen be used as fuel?Yes, hydrogen is used as rocket fuel. It can also power fuel cells to generate electricity.
What is mercury's atomic number?The atomic number of mercury is 80
What is Mercury?Mercury is a silver colored metal that is liquid at room temperature. It has an atomic number of 80 on the periodic table. It is toxic to humans.
+
+

We used GPT-4 to help me come up many of these QAs.

+
+

Then, we wrote a Python script to convert each row in the CSV file into a sample QA in the Llama2 chat template format. Notice that each QA pair starts with <SFT> as an indicator for the fine-tune program to start a sample. The result train.txt file can now be used in fine-tuning.

+

Put the train.txt file in the llama.cpp/models directory with the GGUF base model.

+

Finetune!

+

Use the following command to start the fine-tuning process on your CPUs. I am putting it in the background so that it can run continuously now. +It could take several days or even a couple of weeks depending on how many CPUs you have.

+
nohup ../build/bin/finetune --model-base llama-2-13b-chat.Q5_K_M.gguf --lora-out lora.bin --train-data train.txt --sample-start '<SFT>' --adam-iter 1024 &
+

You can check the process every few hours in the nohup.out file. It will report the loss for each iteration. You can stop the process when the loss goes consistently under 0.1.

+

Note 1 If you have multiple CPUs (or CPU cores), you can speed up the fine-tuning process by adding a -t parameter to the above command to use more threads. For example, if you have 60 CPU cores, you could do -t 60 to use all of them.

+

Note 2 If your fine-tuning process is interrupted, you can restart it from checkpoint-250.gguf. The next file it outputs is checkpoint-260.gguf.

+
nohup ../build/bin/finetune --model-base llama-2-13b-chat.Q5_K_M.gguf --checkpoint-in checkpoint-250.gguf --lora-out lora.bin --train-data train.txt --sample-start '<SFT>' --adam-iter 1024 &
+

Merge

+

The fine-tuning process updates several layers of the LLM's neural network. Those updated layers are saved in a file called lora.bin and you can now merge them back to the base LLM to create the new fine-tuned LLM.

+
../build/bin/export-lora --model-base llama-2-13b-chat.Q5_K_M.gguf --lora lora.bin --model-out chemistry-assistant-13b-q5_k_m.gguf
+

The result is this file.

+
curl -LO https://huggingface.co/juntaoyuan/chemistry-assistant-13b/resolve/main/chemistry-assistant-13b-q5_k_m.gguf
+

Note 3 If you want to use a checkpoint to generate a lora.bin file, use the following command. This is needed when you believe the final lora.bin is an overfit.

+
../build/bin/finetune --model-base llama-2-13b-chat.Q5_K_M.gguf --checkpoint-in checkpoint-250.gguf --only-write-lora --lora-out lora.bin
+ + \ No newline at end of file diff --git a/build/1.0.0/creator-guide/knowledge/concepts/index.html b/build/1.0.0/creator-guide/knowledge/concepts/index.html new file mode 100644 index 0000000..ec770d1 --- /dev/null +++ b/build/1.0.0/creator-guide/knowledge/concepts/index.html @@ -0,0 +1,73 @@ + + + + + +Gaia nodes with long-term knowledge | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Gaia nodes with long-term knowledge

+

The LLM app requires both long-term and short-term memories. Long-term memory includes factual knowledge, historical facts, background stories etc. They are best added to the context as complete chapters instead of small chunks of text to maintain the internal consistency of the knowledge.

+

RAG +is an important technique to inject contextual knowledge into an LLM application. It improves accuracy and reduces the hallucination of LLMs. +An effective RAG application combines real-time and user-specific short-term memory (chunks) with stable long-term memory (chapters) in the prompt context.

+

Since the application's long-term memory is stable (even immutable), we package it in a vector database tightly coupled with the LLM. The client app assembles the short-term memory in the prompt and is supplemented with the long-term memory on the LLM server. We call the approach "server-side RAG".

+
+

The long context length supported by modern LLMs are especially well-suited for long-term knowledge that are best represented by chapters of text.

+
+

A Gaia node is an OpenAI +compatible LLM service that is grounded by long-term knowledge on the server side. The client application +can simply chat with it or provide realtime / short-term memory since the LLM is already aware of the +domain or background.

+
+

For example, if you ask ChatGPT the question What is Layer 2, the answer is that Layer 2 is a concept from the computer network. However, if you ask a blockchain person, they answer that Layer 2 is a way to scale the original Ethereum network. That's the difference between a generic LLM and knowledge-supplemented LLMs.

+
+

We will cover the external knowledge preparation and how a knowledge-supplemented LLM completes a conversation. If you have learned how a RAG application works, go to Build a RAG application with Gaia to start building one.

+
    +
  1. Create embeddings for your own knowledge as the long-term memory.
  2. +
  3. Lifecycle of a user query on a knowledge-supplemented LLM.
  4. +
+

For this solution, we will use

+
    +
  • a chat model like Llama-3-8B for generating responses to the user.
  • +
  • a text embedding model like nomic-embed-text for creating and retrieving embeddings.
  • +
  • a Vector DB like Qdrant for storing embeddings.
  • +
+

Workflow for creating knowledge embeddings

+

The first step is to create embeddings for our knowledge base and store the embeddings in a vector DB.

+

create-embedding

+

First of all, we split the long text into sections (i.e, chunks). All LLMs have a maximum context length. The model can't read the context if the text is too long. +The most used rule for a Gaia node is to put the content in one chapter together. Remember, insert a blank line between two chunks. You can also use other algorithms to chunk your text.

+

After chunking the document, we can convert these chunks into embeddings leveraging the embedding model. The embedding model is trained to create embeddings based on text and search for similar embeddings. We will use the latter function in the process of user query.

+

Additionally, we will need a vector DB to store the embeddings so that we can retrieve these embeddings quickly at any time.

+

On a Gaia node, we will get a database snapshot with the embeddings to use at last. Check out how to create your embeddings using Gaia web tool, from a plain text file, and from a markdown file.

+

Lifecycle of a user query on a knowledge-supplemented LLM

+

Next, let's learn the lifecycle of a user query on a knowledge-supplemented LLM. We will take a Gaia Node with Gaia knowledge as an example.

+

user-query-rag

+

Ask a question

+

when you send a question in human language to the node, the embedding model will first convert your question to embedding.

+

Retrieve similar embeddings

+

Then, the embedding model will search all the embeddings stored in the Qdrant vector DB and retrieve the embeddings that are similar to the question embeddings.

+

Response to the user query

+

The embedding node will return the retrieved embeddings to the chat model. The chat model will use the retrieved embeddings plus your input questions as context to answer your queries finally.

+ + \ No newline at end of file diff --git a/build/1.0.0/creator-guide/knowledge/csv/index.html b/build/1.0.0/creator-guide/knowledge/csv/index.html new file mode 100644 index 0000000..2059ebb --- /dev/null +++ b/build/1.0.0/creator-guide/knowledge/csv/index.html @@ -0,0 +1,84 @@ + + + + + +Knowledge base from source / summary pairs | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Knowledge base from source / summary pairs

+

In this section, we will discuss how to create a vector collection snapshot for optimal retrieval of +long-form text documents. The approach is to create two columns of text in a CSV file.

+
    +
  • The first column is the long-form source text from the knowledge document, such as a book chapter or a markdown section.
  • +
  • The long-form source text is difficult to search. The second column is a "search-friendly" summary of the source text. It could contain a list of questions that can be answered by the first column source text.
  • +
+

We will create a vector snapshot where each vector is computed from the summary text (second column), but the +retrieved source text for that vector is from the first column. +The snapshot file can then be loaded by a Gaia node as its knowledge base.

+
+

We have a simple Python script to build properly formatted CSV files from a set of articles or chapters. See how it works.

+
+

Prerequisites

+

Install the WasmEdge Runtime, the cross-platform LLM runtime.

+
curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install_v2.sh | bash -s
+

Download an embedding model.

+
curl -LO https://huggingface.co/gaianet/Nomic-embed-text-v1.5-Embedding-GGUF/resolve/main/nomic-embed-text-v1.5.f16.gguf
+

The embedding model is a special kind of LLM that turns sentences into vectors. The vectors can then be stored in a vector database and searched later. When the sentences are from a body of text that represents a knowledge domain, that vector database becomes our RAG knowledge base.

+

Start a vector database

+

By default, we use Qdrant as the vector database. You can start a Qdrant instance +by starting a Gaia node with a knowledge snapshot.

+
note

Or, you can start a Qdrant server using Docker. The following command starts it in the background.

mkdir qdrant_storage
mkdir qdrant_snapshots

nohup docker run -d -p 6333:6333 -p 6334:6334 \
-v $(pwd)/qdrant_storage:/qdrant/storage:z \
-v $(pwd)/qdrant_snapshots:/qdrant/snapshots:z \
qdrant/qdrant
+

Create the vector collection snapshot

+

Delete the default collection if it exists.

+
curl -X DELETE 'http://localhost:6333/collections/default'
+

Create a new collection called default. Notice that it is 768 dimensions. That is the output vector size of the embedding model nomic-embed-text-v1.5. If you are using a different embedding model, you should use a dimension that fits the model.

+
curl -X PUT 'http://localhost:6333/collections/default' \
-H 'Content-Type: application/json' \
--data-raw '{
"vectors": {
"size": 768,
"distance": "Cosine",
"on_disk": true
}
}'
+

Download a program to create embeddings from the CSV file.

+
curl -LO https://github.com/GaiaNet-AI/embedding-tools/raw/main/csv_embed/csv_embed.wasm
+

You can check out the Rust source code here and modify it if you need to use a different CSV layout.

+

Next, you can run the program by passing a collection name, vector dimension, and the CSV document. +The --ctx_size option matches the embedding model's context window size, which in this case is 8192 tokens allowing it to process long sections of text. Make sure that Qdrant is running on your local machine. The model is preloaded under the name embedding. The wasm app then uses the embedding model to create the 768-dimension vectors from paris.csv and saves them into the default collection.

+
curl -LO https://huggingface.co/datasets/gaianet/paris/raw/main/paris.csv

wasmedge --dir .:. \
--nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \
csv_embed.wasm embedding default 768 paris.csv --ctx_size 8192
+

Options

+

You can pass the following options to the program.

+
    +
  • Using -c or --ctx_size to specify the context size of the input. This defaults to 512.
  • +
  • Using -m or --maximum_context_length to specify a context length in the CLI argument. That is to truncate and warn for each text segment that goes above the context length.
  • +
  • Using -s or --start_vector_id to specify the start vector ID in the CLI argument. This will allow us to run this app multiple times on multiple documents on the same vector collection.
  • +
+

Example: the above example but to append the London guide to the end of an existing collection starting from index 42.

+
wasmedge --dir .:. \
--nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \
csv_embed.wasm embedding default 768 london.csv -c 8192 -l 1 -s 42
+

Create a vector snapshot

+

You can create a snapshot of the collection, which can be shared and loaded into a different Qdrant database. You can find the snapshot file in the qdrant_snapshots directory, or the ~/gaianet/qdrant/snapshots directory in the Gaia node.

+
curl -X POST 'http://localhost:6333/collections/default/snapshots'
+

We also recommend you to compress the snapshot file.

+
tar czvf my.snapshot.tar.gz my.snapshot
+

Finally, upload the my.snapshot.tar.gz file to Huggingface so that the Gaia node can download and use it.

+

Next steps

+ +

Have fun!

+ + \ No newline at end of file diff --git a/build/1.0.0/creator-guide/knowledge/firecrawl/index.html b/build/1.0.0/creator-guide/knowledge/firecrawl/index.html new file mode 100644 index 0000000..4a37270 --- /dev/null +++ b/build/1.0.0/creator-guide/knowledge/firecrawl/index.html @@ -0,0 +1,52 @@ + + + + + +Knowledge base from a URL | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Knowledge base from a URL

+

In this section, we will discuss how to create a vector collection snapshot from a Web URL. First, we will parse the URL to a structured markdown file. Then, we will follow the steps from Knowledge base from a markdown file to create embedding for your URL.

+

Parse the URL content to a markdown file

+

Firecrawl can crawl and convert any website into LLM-ready markdown or structured data. It also supports crawling a URL and all accessible subpages.

+
+

To use Firecrawl, you need to sign up on Firecrawl and get an API key.

+
+

First, install the dependencies. We are assuming that you already have Node.JS 20+ installed.

+
git clone https://github.com/JYC0413/firecrawl-integration.git
cd firecrawl-integration
npm install
+

Then, export the API key in the terminal.

+
export FIRECRAWL_KEY="your_api_key_here"
+

next, we can use the following command line to run the service.

+
node crawlWebToMd.js
+

After the application is running successfully, you will see the prompt appear on the Terminal.

+

+

You can type your URL in the terminal right now. Here we have two choices.

+
    +
  • Multiple pages: input your link with / at the end, the program will crawl and convert the page and its subpages to one single markdown file. This way will cost lots of API token usage.
  • +
  • One single page: input your link without / at the end. the program will crawl and convert the current page to one single markdown file.
  • +
+

The output markdown file will be located in this folder named output.md.

+

Create embeddings from the markdown files

+

Please follow the tutorial Knowledge base from a markdown file to convert your markdown file to a snapshot of embeddings that can be imported into a GaiaNet node.

+ + \ No newline at end of file diff --git a/build/1.0.0/creator-guide/knowledge/markdown/index.html b/build/1.0.0/creator-guide/knowledge/markdown/index.html new file mode 100644 index 0000000..6c02275 --- /dev/null +++ b/build/1.0.0/creator-guide/knowledge/markdown/index.html @@ -0,0 +1,76 @@ + + + + + +Knowledge base from a markdown file | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Knowledge base from a markdown file

+

In this section, we will discuss how to create a vector collection snapshot from a markdown file. The +snapshot file can then be loaded by a Gaia node as its knowledge base.

+

The markdown file is segmented into multiple sections by headings. See an example. Each section is turned into a vector, and when +retrieved, added to the prompt context for the LLM.

+

Prerequisites

+

Install the WasmEdge Runtime, the cross-platform LLM runtime.

+
curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install_v2.sh | bash -s
+

Download an embedding model.

+
curl -LO https://huggingface.co/gaianet/Nomic-embed-text-v1.5-Embedding-GGUF/resolve/main/nomic-embed-text-v1.5.f16.gguf
+

The embedding model is a special kind of LLM that turns sentences into vectors. The vectors can then be stored in a vector database and searched later. When the sentences are from a body of text that represents a knowledge domain, that vector database becomes our RAG knowledge base.

+

Start a vector database

+

By default, we use Qdrant as the vector database. You can start a Qdrant instance +by starting a Gaia node with a knowledge snapshot.

+
note

Or, you can start a Qdrant server using Docker. The following command starts it in the background.

mkdir qdrant_storage
mkdir qdrant_snapshots

nohup docker run -d -p 6333:6333 -p 6334:6334 \
-v $(pwd)/qdrant_storage:/qdrant/storage:z \
-v $(pwd)/qdrant_snapshots:/qdrant/snapshots:z \
qdrant/qdrant
+

Create the vector collection snapshot

+

Delete the default collection if it exists.

+
curl -X DELETE 'http://localhost:6333/collections/default'
+

Create a new collection called default. Notice that it is 768 dimensions. That is the output vector size of the embedding model nomic-embed-text-v1.5. If you are using a different embedding model, you should use a dimension that fits the model.

+
curl -X PUT 'http://localhost:6333/collections/default' \
-H 'Content-Type: application/json' \
--data-raw '{
"vectors": {
"size": 768,
"distance": "Cosine",
"on_disk": true
}
}'
+

Download a program to segment the markdown document and create embeddings.

+
curl -LO https://github.com/GaiaNet-AI/embedding-tools/raw/main/markdown_embed/markdown_embed.wasm
+

It chunks the document based on markdown sections. You can check out the Rust source code here and modify it if you need to use a different chunking strategy.

+

Next, you can run the program by passing a collection name, vector dimension, and the source document. You can pass in the desired markdown heading level for chunking using the --heading_level option. The --ctx_size option matches the embedding model's context window size, which in this case is 8192 tokens allowing it to process long sections of text. Make sure that Qdrant is running on your local machine. The model is preloaded under the name embedding. The wasm app then uses the embedding model to create the 768-dimension vectors from paris.md and saves them into the default collection.

+
curl -LO https://huggingface.co/datasets/gaianet/paris/raw/main/paris.md

wasmedge --dir .:. \
--nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \
markdown_embed.wasm embedding default 768 paris.md --heading_level 1 --ctx_size 8192
+

Options

+

You can pass the following options to the program.

+
    +
  • Using -c or --ctx_size to specify the context size of the input. This defaults to 512.
  • +
  • Using -l or --heading_level to specify the markdown heading level for each vector. This defaults to 1.
  • +
  • Using -m or --maximum_context_length to specify a context length in the CLI argument. That is to truncate and warn for each text segment that goes above the context length.
  • +
  • Using -s or --start_vector_id to specify the start vector ID in the CLI argument. This will allow us to run this app multiple times on multiple documents on the same vector collection.
  • +
+

Example: the above example but to append the London guide to the end of an existing collection starting from index 42.

+
wasmedge --dir .:. \
--nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \
markdown_embed.wasm embedding default 768 london.md -c 8192 -l 1 -s 42
+

Create a vector snapshot

+

You can create a snapshot of the collection, which can be shared and loaded into a different Qdrant database. You can find the snapshot file in the qdrant_snapshots directory, or the ~/gaianet/qdrant/snapshots directory in the Gaia node.

+
curl -X POST 'http://localhost:6333/collections/default/snapshots'
+

We also recommend you to compress the snapshot file.

+
tar czvf my.snapshot.tar.gz my.snapshot
+

Finally, upload the my.snapshot.tar.gz file to Huggingface so that the Gaia node can download and use it.

+

Next steps

+ +

Have fun!

+ + \ No newline at end of file diff --git a/build/1.0.0/creator-guide/knowledge/pdf/index.html b/build/1.0.0/creator-guide/knowledge/pdf/index.html new file mode 100644 index 0000000..6efd6aa --- /dev/null +++ b/build/1.0.0/creator-guide/knowledge/pdf/index.html @@ -0,0 +1,51 @@ + + + + + +Knowledge base from a PDF file | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Knowledge base from a PDF file

+

In this section, we will discuss how to create a vector collection snapshot from a PDF file. First, we will parse the unstructured PDF file to a structured markdown file. Then, we will follow the steps from Knowledge base from a markdown file to create embedding for your PDF files.

+

Tools to convert a PDF file to a markdown file

+

Tool #1: LlamaParse

+

LlamaParse is a tool to parse files for optimal RAG. You will need a LlamaCloud key from https://cloud.llamaindex.ai.

+

First, install the dependencies. we are assuming that you already have Node.JS 20+ installed.

+
git clone https://github.com/alabulei1/llamaparse-integration.git
cd llamaparse-integration
npm install llamaindex
npm install dotenv
+

Then, edit the .env file to set up the PDF file path and LlamaCloud Key. In this case, you don't need to care about the LLM-related settings.

+

After that, run the following command line to parse your pdf into a markdown file.

+
npx tsx transMd.ts
+

The output markdown file will be located in this folder named output.md by default. You can change the path in the .env file.

+

Tool #2: GPTPDF

+

GPTPDF is an open-source tool using GPT-4o to parse PDF into markdown. You will need an OpenAI key here.

+

First, install the gptpdf software.

+
pip install gptpdf
+

Then, enter the Python environment.

+
python
+

Next, use the following command to parse your pdf.

+
from gptpdf import parse_pdf
api_key = 'Your OpenAI API Key'
content, image_paths = parse_pdf(Your_Pdf_Path, api_key=api_key)
print(content)
+

The output markdown files called output.md will be located in your root directory.

+

Create embeddings from the markdown files

+

Please follow the tutorial Knowledge base from a markdown file to convert your markdown file to a snapshot of embeddings that can be imported into a GaiaNet node.

+ + \ No newline at end of file diff --git a/build/1.0.0/creator-guide/knowledge/text/index.html b/build/1.0.0/creator-guide/knowledge/text/index.html new file mode 100644 index 0000000..30aa276 --- /dev/null +++ b/build/1.0.0/creator-guide/knowledge/text/index.html @@ -0,0 +1,78 @@ + + + + + +Knowledge base from a plain text file | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Knowledge base from a plain text file

+

In this section, we will discuss how to create a vector collection snapshot from a plain text file. The +snapshot file can then be loaded by a Gaia node as its knowledge base.

+

The text file is segmented into multiple chunks by blank lines. See an example. Each chunk is turned into a vector, and when +retrieved, added to the prompt context for the LLM.

+

Prerequisites

+

Install the WasmEdge Runtime, the cross-platform LLM runtime.

+
curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install_v2.sh | bash -s
+

Download an embedding model.

+
curl -LO https://huggingface.co/gaianet/Nomic-embed-text-v1.5-Embedding-GGUF/resolve/main/nomic-embed-text-v1.5.f16.gguf
+

The embedding model is a special kind of LLM that turns sentences into vectors. The vectors can then be stored in a vector database and searched later. When the sentences are from a body of text that represents a knowledge domain, that vector database becomes our RAG knowledge base.

+

Start a vector database

+

By default, we use Qdrant as the vector database. You can start a Qdrant instance +by starting a Gaia node with a knowledge snapshot.

+
note

Or, you can start a Qdrant server using Docker. The following command starts it in the background.

mkdir qdrant_storage
mkdir qdrant_snapshots

nohup docker run -d -p 6333:6333 -p 6334:6334 \
-v $(pwd)/qdrant_storage:/qdrant/storage:z \
-v $(pwd)/qdrant_snapshots:/qdrant/snapshots:z \
qdrant/qdrant
+

Create the vector collection snapshot

+

Delete the default collection if it exists.

+
curl -X DELETE 'http://localhost:6333/collections/default'
+

Create a new collection called default. Notice that it is 768 dimensions. That is the output vector size of the embedding model nomic-embed-text-v1.5. If you are using a different embedding model, you should use a dimension that fits the model.

+
curl -X PUT 'http://localhost:6333/collections/default' \
-H 'Content-Type: application/json' \
--data-raw '{
"vectors": {
"size": 768,
"distance": "Cosine",
"on_disk": true
}
}'
+

Download a program to chunk a document and create embeddings.

+
curl -LO https://github.com/GaiaNet-AI/embedding-tools/raw/main/paragraph_embed/paragraph_embed.wasm
+

It chunks the document based on empty lines. So, you MUST prepare your source document this way -- segment the document into sections of around 200 words with empty lines. You can check out the Rust source code here and modify it if you need to use a different chunking strategy.

+
+

The paragraph_embed.wasm program would NOT break up code listings even if there are empty lines with in the listing.

+
+

Next, you can run the program by passing a collection name, vector dimension, and the source document. Make sure that Qdrant is running on your local machine. The model is preloaded under the name embedding. The wasm app then uses the embedding model to create the 768-dimension vectors from paris_chunks.txt and saves them into the default collection.

+
curl -LO https://huggingface.co/datasets/gaianet/paris/raw/main/paris_chunks.txt

wasmedge --dir .:. \
--nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \
paragraph_embed.wasm embedding default 768 paris_chunks.txt -c 8192
+

Options

+

You can pass the following options to the program.

+
    +
  • Using -m or --maximum_context_length to specify a context length in the CLI argument. That is to truncate and warn for each text segment that goes above the context length.
  • +
  • Using -s or --start_vector_id to specify the start vector ID in the CLI argument. This will allow us to run this app multiple times on multiple documents on the same vector collection.
  • +
  • Using -c or --ctx_size to specify the context size of the input. This defaults to 512.
  • +
+

Example: the above example but to append the London guide to the end of an existing collection starting from index 42.

+
wasmedge --dir .:. \
--nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \
paragraph_embed.wasm embedding default 768 london.txt -c 8192 -s 42
+

Create a vector snapshot

+

You can create a snapshot of the collection, which can be shared and loaded into a different Qdrant database. You can find the snapshot file in the qdrant_snapshots directory, or the ~/gaianet/qdrant/snapshots directory in the Gaia node.

+
curl -X POST 'http://localhost:6333/collections/default/snapshots'
+

We also recommend you to compress the snapshot file.

+
tar czvf my.snapshot.tar.gz my.snapshot
+

Finally, upload the my.snapshot.tar.gz file to Huggingface so that the Gaia node can download and use it.

+

Next steps

+ +

Have fun!

+ + \ No newline at end of file diff --git a/build/1.0.0/creator-guide/knowledge/web-tool/index.html b/build/1.0.0/creator-guide/knowledge/web-tool/index.html new file mode 100644 index 0000000..e0ffa92 --- /dev/null +++ b/build/1.0.0/creator-guide/knowledge/web-tool/index.html @@ -0,0 +1,58 @@ + + + + + +Build a knowledge base using Gaia web tool | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Build a knowledge base using Gaia web tool

+

GaiaNet has developed a tool for making vector collection snapshot files, so everyone can easily create their own knowledge base.

+

Access it here: https://tools.gaianet.xyz/

+

Segment your text file

+

First, copy unformatted text into a txt file. Then follow the two rules to chunk your content, ie putting similar content together.

+
    +
  • Each title and related content are a chunk. There is no blank lines in one chunk.
  • +
  • Use a blank line to recognize different chunks.
  • +
+

After that, save it as a txt file.

+

For example, below is your source.

+

The input knowledge in a text file

+

After formatted, it will look like the following.

+
What is a blockchain?
A blockchain is a distributed, cryptographically-secure database structure that allows network participants to establish a trusted and immutable record of transactional data without the need for intermediaries. A blockchain can execute a variety of functions beyond transaction settlement, such as smart contracts. Smart contracts are digital agreements that are embedded in code and can have limitless formats and conditions. Blockchains have proven themselves as superior solutions for securely coordinating data, but they are capable of much more, including tokenization, incentive design, attack-resistance, and reducing counterparty risk. The very first blockchain was the Bitcoin blockchain, which was itself a culmination of over a century of advancements in cryptography and database technology.

What is blockchain software?
Blockchain software is like any other software. The first of its kind was Bitcoin, which was released as open source software, making it available to anyone to use or change. There are a wide variety of efforts across the blockchain ecosystem to improve upon Bitcoin's original software. Ethereum has its own open source blockchain software. Some blockchain software is proprietary and not available to the public.
+

Generate the snapshot file

+
    +
  1. Visit this URL: https://tools.gaianet.xyz/, upload the above prepared txt file.
  2. +
  3. Edit your dbname . Note: Do not include spaces or special characters in the dbname.
  4. +
  5. Choose Embedding model, we suggest use nomic-embed-text-v1.5.f16.
  6. +
  7. Click the "Make RAG" button and wait.
  8. +
+

When finished, the chatbot will display GaiaNet Node config info. It is a JSON format as follows.

+
{
"embedding": "https://huggingface.co/gaianet/Nomic-embed-text-v1.5-Embedding-GGUF/resolve/main/nomic-embed-text-v1.5.f16.gguf",
"embedding_ctx_size": 768,
"snapshot": "https://huggingface.co/datasets/max-id/gaianet-qdrant-snapshot/resolve/main/test/test.snapshot"
}
+

Update the node config

+

Run the following

+
gaianet config \
--snapshot https://huggingface.co/datasets/max-id/gaianet-qdrant-snapshot/resolve/main/test/test.snapshot \
--embedding-url https://huggingface.co/gaianet/Nomic-embed-text-v1.5-Embedding-GGUF/resolve/main/nomic-embed-text-v1.5.f16.gguf \
--embedding-ctx-size 768
+

and then

+
gaianet init
gaianet start
+

Have fun!

+ + \ No newline at end of file diff --git a/build/1.0.0/domain-guide/quick-start/index.html b/build/1.0.0/domain-guide/quick-start/index.html new file mode 100644 index 0000000..c26d8e8 --- /dev/null +++ b/build/1.0.0/domain-guide/quick-start/index.html @@ -0,0 +1,72 @@ + + + + + +Quick Start with Launching Gaia Domain | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Quick Start with Launching Gaia Domain

+

This guide provides all the information you need to quickly set up and run a Gaia Domain.

+
+

Note: Ensure that you are the owner of a Gaia Domain Name before proceeding. You can verify your Gaia Domain Name in the "Assets" section of your profile.

+
+

Gaia simplifies the process for domain operators to launch and host a Gaia Domain service in just a few clicks.

+

Steps to Launch Your Gaia Domain

+
    +
  1. +

    Access the Create Gaia Domain Page
    +Click LAUNCH DOMAIN in the "Domain" or "Assets" section under your profile. This will take you to the Create Gaia Domain page.

    +
  2. +
  3. +

    Fill in Domain Details
    +Enter the general information for your domain, including:

    +
      +
    • Domain profile
    • +
    • Domain Name
    • +
    • Description
    • +
    • System Prompt
    • +
    +
  4. +
  5. +

    Choose a Gaia Domain Name
    +Select a Gaia domain name from your assets.

    +
  6. +
  7. +

    Select a Supplier
    +Currently, Gaia Cloud is the only supplier.

    +
  8. +
  9. +

    Pick a Gaia Domain Tier
    +Choose a tier to enhance your domain's rewards, which is necessary.

    +
  10. +
  11. +

    Configure Server and Management Options

    +
      +
    • Confirm the server configuration for running your domain.
    • +
    • Set management preferences, such as whether nodes can join automatically and the specific LLM to use.
    • +
    +
  12. +
+

After completing these six steps, your Gaia Domain will be successfully launched and other nodes can join your domain.

+ + \ No newline at end of file diff --git a/build/1.0.0/intro/index.html b/build/1.0.0/intro/index.html new file mode 100644 index 0000000..b56d2f2 --- /dev/null +++ b/build/1.0.0/intro/index.html @@ -0,0 +1,63 @@ + + + + + +Overview | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Overview

+

GaiaNet is a decentralized computing infrastructure that enables everyone to create, deploy, scale, and monetize their own AI agents that reflect their styles, values, knowledge, and expertise. +It allows individuals and businesses to create AI agents. Each GaiaNet node provides:

+
    +
  • a web-based chatbot UI Chat with a GaiaNet node that is an expert on the Rust programming language.
  • +
  • an OpenAI compatible API. See how to use a GaiaNet node as a drop-in OpenAI replacement in your favorite AI agent app.
  • +
+

100% of today's AI agents are applications in the OpenAI ecosystem. With our API approach, GaiaNet is an alternative to OpenAI. Each GaiaNet node has the ability to be customized with a fine-tuned model supplemented by domain knowledge which eliminates the generic responses many have come to expect. For example, a GaiaNet node for a financial analyst agent can write SQL code to query SEC 10K filings to respond to user questions.

+

Similar GaiaNet nodes are organized into GaiaNet domains, to provide stable services by load balancing across the nodes. GaiaNet domains have public-facing URLs and promote agent services to their communities. When a user or an agent app sends an API request to the domain's API endpoint URL, the domain is responsible for directing the request to a node that is ready.

+

Next steps:

+

Users

+

If you are an end user of AI agent applications, you can:

+ +

Node operators

+

If you are interested in running GaiaNet nodes, you can

+ +

Domain operators

+

If you are a Gaia Domain Name owner, you can

+ +

Creators

+

If you are a creator or knowledge worker interested in creating your own AI agent service, you can:

+
+ + \ No newline at end of file diff --git a/build/1.0.0/litepaper/index.html b/build/1.0.0/litepaper/index.html new file mode 100644 index 0000000..f4f4ec5 --- /dev/null +++ b/build/1.0.0/litepaper/index.html @@ -0,0 +1,149 @@ + + + + + +GaiaNet: GenAI Agent Network | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

GaiaNet: GenAI Agent Network

+

Abstract

+

Specialized, finetuned and RAG-enhanced open-source Large Language Models are key elements in emerging AI agent applications. However, those agent apps also present unique challenges to the traditional cloud computing and SaaS infrastructure, including new requirements for application portability, virtualization, security isolation, costs, data privacy, and ownership.

+

GaiaNet is a decentralized computing infrastructure that enables everyone to create, deploy, scale, and monetize their own AI agents that reflect their styles, values, knowledge, and expertise. A GaiaNet node consists of a high-performance and cross-platform application runtime, a finetuned LLM, a knowledge embedding model, a vector database, a prompt manager, an open API server, and a plugin system for calling external tools and functions using LLM outputs. It can be deployed by any knowledge worker as a digital twin and offered as a web API service. A new class of tradeable assets and a marketplace could be created from individualized knowledge bases and components. Similar GaiaNet nodes are organized into GaiaNet domains, which offer trusted and reliable AI agent services to the public. The GaiaNet node and domains are governed by the GaiaNet DAO (Decentralized Autonomous Organization). Through Purpose Bound Money smart contracts, the GaiaNet network is a decentralized marketplace for AI agent services.

+

Introduction

+

The emergence of ChatGPT and Large Language Model (LLM) has revolutionized how humans produce and consume knowledge. Within a year, AI-native applications have evolved from chatbots to copilots, to agents.

+
+

AI agents would increasingly evolve from supportive tools (akin to Copilots) to autonomous entities capable of completing tasks independently. — Dr. Andrew Ng at Sequoia Capital AI Ascent 2024 Summit

+
+

Agents are software applications that can complete tasks on its own autonomously like a human. The agent can understand the task, plan the steps to complete the task, execute all the steps, handle errors and exceptions, and deliver the results. While a powerful LLM could act as the “brain” for the agent, we need to connect to external data sources (eyes and ears), domain-specific knowledge base and prompts (skills), context stores (memory), and external tools (hands). For agent tasks, we often need to customize the LLM itself

+
    +
  • to reduce hallucinations in a specific domain.
  • +
  • to generate responses in a specific format (e.g., a JSON schema).
  • +
  • to answer “politically incorrect” questions (e.g., to analyze CVE exploits for an agent in the security domain).
  • +
  • and to answer requests in a specific style (e.g., to mimic a person).
  • +
+

What is a GaiaNet agent

+

Agents are complex software that require significant amount of engineering and resources. Today, most agents are close-source and hosted on SaaS-based LLMs. Popular examples include GPTs and Microsoft/GitHub copilots on OpenAI LLMs, and Duet on Google’s Gemini LLMs.

+

However, as we discussed, a key requirement for agents is to customize and adapt its underlying LLM and software stack for domain-specific tasks — an area where centralized SaaS perform very poorly. For example, with ChatGPT, every small task must be handled by a very large model. It is also enormously expensive to fine-tune or modify any ChatGPT models. The one-size-fits-all LLMs are detrimental to the agent use case in capabilities, alignment, and cost structure. Furthermore, the SaaS hosted LLMs lack privacy controls on how the agent’s private knowledge might be used and shared. Because of these shortcomings, it is difficult for individual knowledge workers to create and monetize agents for his or her own domain and tasks on SaaS platforms like OpenAI, Google, Anthropic, Microsoft and AWS.

+

In this paper, we propose a decentralized software platform and protocol network for AI agents for everyone. Specifically, our goals are two-folds.

+

Goal #1: Empower individuals to incorporate his/her private knowledge and expertise into personal LLM agent apps. Those apps aim to perform knowledge tasks and use tools just as the individual would, but also reflect the individual’s style and values.

+

Goal #2: Enable individuals to provide and scale their LLM agents as services, and get compensated for their expertise and work.

+
+

GaiaNet is “YouTube for knowledge and skills.”

+
+

Open-source and decentralization

+

As of April 2024, there are over 6000 open-source LLMs published on Hugging face. Compared with close-source LLMs, such as GPT-4, open-source LLMs offer advantages in privacy, cost, and systematic bias. Even with general QA performance, open-source LLMs are closing the gap with close-source counterparties quickly.

+

Open vs close source LLMs

+

For AI agent use cases, it has been demonstrated that smaller but task-specific LLMs often outperform larger general models.

+

However, it is difficult for individuals and businesses to deploy and orchestrate multiple finetuned LLMs on their own heterogeneous GPU infrastructure. The complex software stack for agents, as well as the complex interaction with external tools, are fragile and error-prone.

+

Furthermore, LLM agents have entirely different scaling characteristics than past application servers. LLM is extremely computationally intensive. A LLM agent server can typically only serve one user at a time, and it often blocks for seconds at a time. The scaling need is no longer to handle many async requests on a single server, but to load balance among many discrete servers on the internet scale.

+

The GaiaNet project provides a cross-platform and highly efficient SDK and runtime for finetuned open-source LLMs with proprietary knowledge bases, customized prompts, structured responses, and external tools for function calling. A GaiaNet node can be started in minutes on any personal, cloud, or edge device. It can then offer services through an incentivized web3 network.

+

GaiaNet node

+

The basic operational unit in the GaiaNet network is a node. A GaiaNet node is a streamlined software stack that allows any technically competent person to run an AI agent of his own. The software stack on the GaiaNet node consists of the following 7 key components.

+

GaiaNet node architecture

+

1 Application runtime. GaiaNet applications run in a lightweight, secure and high-performance sandbox called WasmEdge. As an open-source project managed by the Linux Foundation and CNCF, WasmEdge runtime works seamlessly with leading cloud native tools such as Docker, containerd, CRI-O, Podman and Kubernetes. It is also the virtual machine of choice by leading public blockchains to securely and efficiently execute on-chain and off-chain smart contracts.

+

WasmEdge is a high-performance and cross-platform runtime. It can run AI models on almost all CPUs, GPUs, and AI accelerators at native speed, making it an ideal runtime for decentralized AI agents.

+

2 Finetuned LLM. The GaiaNet node supports almost all open-source LLMs, multimodal models (eg Large Vision Models or LVMs), text-to-image models (eg Stable Diffusion) and text-to-video models. That includes all finetuned models using personal or proprietary data.

+

The node owner can finetune open-source models using a wide variety of tools. For example, the node owner can finetune an LLM using personal chat histories so that the finetuned LLM can mimic his own speaking style. He can also finetune an LLM to focus it on a specific knowledge domain to reduce hallucinations and improve answer quality for questions in that domain. A finetuned LLM can guarantee to output JSON text that matches a pre-determined schema for use with external tools.

+

Besides LLMs, the node owner could finetune Stable Diffusion models with her own photos to generate images that look like her.

+

3 Embedding model. The GaiaNet node needs to manage a body of public or proprietary knowledge for the AI agent. It is a key feature that enables the agent to specialize and outperform much larger models in a specific domain. The embedding models are specially trained LLMs that turns input sentences into a vector representation, instead of generating completions. Since the embedding models are trained from LLMs, they can “embed” the “meaning” of the sentences into the vectors so that similar sentences are located close together in the high dimensional space occupied by those vectors.

+

With the embedding model, a GaiaNet node can ingest a body of text, images, PDFs, web links, audio and video files, and generate a collection of embedding vectors based on their contents. The embedding model also turns user questions and conversations into vectors, which allows the GaiaNet node to quickly identify contents in its knowledge base that are relevant to the current conversation.

+

4 Vector database. The embedding vectors that form GaiaNet node’s knowledge base are stored on the node itself for optimal performance and maximum privacy. The GaiaNet node includes a Qdrant vector database.

+

5 Custom prompts. Besides finetuning and knowledge arguments, the easiest way to customize an LLM for new applications is simply to prompt it. Like humans, LLMs are remarkable one-shot learners. You can simply give it an example of how to accomplish a task, and it will learn and do similar tasks on its own. Prompt engineering is a practical field to research and develop such prompts.

+

Furthermore, effective prompts could be highly dependent on the model in use. A prompt that works well for a large model, such as Mixtral 8x22b, is probably not going to work well for a small model like Mistral 7b.

+

The GaiaNet node can support several different prompts that are dynamically chosen and used in applications. For example,

+
    +
  • The system_prompt is a general introduction to the agent task the node is supposed to perform. It often contains a persona to help the LLM respond with the right tone. For example, the system_prompt for a college teaching assistant could be: “You are a teaching assistant for UC Berkeley’s computer science 101 class. Please explain concepts and answer questions in detail. Do not answer any question that is not related to math or computer science.”
  • +
  • The rag_prompt is a prefix prompt to be dynamically inserted in front of knowledge base search results in an RAG chat. It could be something like this: “Please answer the question based on facts and opinions in the context below. Do not make anything that is not in the context. ---------”
  • +
+

The LLM community has developed many useful prompts for different application use cases. GaiaNet node allows you to easily manage and experiment with them.

+

Through the our developer SDK, GaiaNet owners and operators could customize the logic of dynamic prompt generation in their own way. For example, a GaiaNet node could perform a Google search for any user question, and add the search results into the prompt as context.

+

6 Function calls and tool use. The LLM not only is great at generating human language, but also excels at generating machine instructions. Through finetuning and prompt engineering, we could get some LLMs to consistently generate structured JSON objects or computer code in many language tasks, such as summarizing and extracting key elements from a paragraph of text.

+

The GaiaNet node allows you to specify the output format of the generated text. You can give it a grammar specification file to enforce that responses will always conform to a pre-defined JSON schema.

+

Once the LLM returns a structured JSON response, the agent typically need to pass the JSON to a tool that performs the task and comes back with an answer. For example, the user question might be.

+
What is the weather like in Singapore?
+

The LLM generates the following JSON response.

+
{"tool":"get_current_weather", "location":"Singapore","unit":"celsius"}
+

The GaiaNet node must know what is the tool associated with get_current_weather and then invoke it. GaiaNet node owners and operators can configure any number of external tools by mapping a tool name with a web service endpoint. In the above example, the get_current_weather tool might be associated with a web service that takes this JSON data. The GaiaNet node sends the JSON to the web service endpoint via HTTPS POST and receives an answer.

+
42
+

It then optionally feeds the answer to the LLM to generate a human language answer.

+
The current weather in Singapore is 42C. 
+

Through the GaiaNet node SDK, developers are not limited to using web services. They can write plugins to process LLM responses locally on the node. For example, the LLM might return Python code, which can be executed locally in a sandbox and for the GaiaNet node to perform a complex operation.

+

7 The API server. All GaiaNet nodes must have the same API for questions and answers. That allows front-end applications to work with, and potentially be load-balanced to any GaiaNet node. We choose to support the OpenAI API specification, which enables GaiaNet nodes to become drop-in replacements for OpenAI API endpoints for a large ecosystem of applications.

+

The API server runs securely and cross-platform on the WasmEdge runtime. It ties together all the other components in the GaiaNet node. It receives user requests, generates an embedding from the request, searches the vector database, adds search results to the prompt context, generates an LLM response, and then optionally uses the response to perform function calling. The API server also provides a web-based chatbot UI for users to chat with the RAG-enhanced finetuned LLM on the node.

+

GaiaNet network

+

While each GaiaNet node is already a powerful AI agent capable of answering complex questions and performing actions, individual nodes are not suitable for providing public services. There are several important reasons.

+
    +
  • For the public consumers and users, it is very hard to judge the trustworthiness of individual GaiaNet nodes. Harmful misinformation could be spread by malicious node operators.
  • +
  • For GaiaNet node owners and operators, there is no economic incentive to provide such services to the public, which could be very costly to run.
  • +
  • The AI agent servers have very different scaling characteristics than traditional internet application servers. When the agent is processing a user request, it typically takes up all the computing resources on the hardware. Instead of using software to scale concurrent users on a single server, the challenge of GaiaNet is to scale to many different identical nodes for a large application.
  • +
+

Those challenges have given rise to the GaiaNet domain, which forms the basis of the GaiaNet web3 network. A GaiaNet domain is a collection of GaiaNet nodes available under a single Internet domain name. The domain operator decides which GaiaNet nodes can be registered under the domain and makes the node services available to the public. For example, a GaiaNet domain might be a Computer Science teaching assistant for UC Berkeley. The domain could provide services through https://cs101.gaianet.berkeley.edu. The domain operator needs to do the following.

+
    +
  • Verify and admit individual nodes to be registered under the domain. Those nodes must all meet requirements, such as the LLM, knowledge base, and prompts, set by the domain operator to ensure service quality. The node registration on a domain could be done via a whitelist or blacklist. It is up to the domain operator.
  • +
  • Monitor each node’s performance at real time and remove inactive ones.
  • +
  • Promotes the “teaching assistant” chatbot apps to the target audience.
  • +
  • Set the price for the API services.
  • +
  • Load balance between active nodes.
  • +
  • Getting paid by users.
  • +
  • Pay nodes for their services.
  • +
+

GaiaNet network architecture

+

Each GaiaNet node has an unique node ID in the form of an ETH address. The private key associated with the ETH address is stored on the node. Once a node is successfully registered with a domain, it is entitled to receive payments from both service revenue and network awards from the domain. The domain could send payments directly to the node's ETH address. Or, the domain could provide a mechanism for a node operator to register multiple nodes under a single Metamask address, such as signing a challenge phrase using the node private keys. In that case, the node operator will receive aggregated payments in his Metamask account for all associated nodes.

+

Each GaiaNet domain has an associated smart contract that is used for escrow payments. It is similar to OpenAI’s credit payment model, where users purchase credits first, and then consume them over time. When the user pays into the smart contract, an access token will be automatically issued to him. He uses this token to make API calls to the domain, which is then load-balanced to random nodes in the domain. As the user consumes those services, his fund in the contract depletes and the access token stops working if he no longer has any balance.

+

The pricing and payment of the API service are determined by the domain operator. It is typically denominated in USD stable coins. The domain operator pays a share of the revenue to node operators who provided the services. The GaiaNet network is a decentralized marketplace of agent services.

+
+

The funds locked in GaiaNet domain contracts are for a single purpose of consuming API services. It is called Purpose Bound Money.

+
+

A key aspect of the GaiaNet protocol is that the domain operators are “trust providers” in the ecosystem of decentralized nodes. The protocol network is designed to incentivize the trust of the operators through tokenomics designs such as mining and staking. GaiaNet nodes, domains, users, and developers form a DAO to grow the network and benefit all contributors.

+

GaiaNet token

+

The GaiaNet token is a utility token designed to facilitate transactions, support governance, and foster trust in the network. It serves three primary purposes.

+
    +
  • As a DAO governance token, holders can participate in setting the rules of the network.
  • +
  • As a staking token, holders vouch for domain operators’ trustworthiness. Stakers get a cut from the domain operator’s service revenue. But they could also be slashed if the domain operator misbehave, such as spreading misinformation or providing unreliable services.
  • +
  • As a payment token, the GaiaNet token could be deposited into the domain’s escrow contract and be used to pay for services over time.
  • +
+

The payment utility of the GaiaNet token is designed to balance the network supply and demand. The value of the GaiaNet token asset is determined at the time when it enters or leaves the escrow smart contract based on real-time exchange rates.

+

Service consumers could lock in savings from the potential appreciation of the token. For example, if a user deposits $100 worth of GaiaNet tokens into the contract, and when the domain and nodes get paid, the token value has gone up to $110, he would have received $110 worth of agent services.

+

Conversely, if the token price drops, the service providers (domains and nodes) now have an opportunity to “mine” the tokens on the cheap. If the $100 initial tokens is only worth $90 now, service providers will get more tokens for each unit of electricity and compute they provide. That incentivizes more nodes to join the network and speculate on a later rise in token value.

+
+

An exercise: OpenAI is projected to reach $5 billion in ARR in 2024. Assume that most enterprise customers pay quarterly, that is $1.25 billion of circulation market cap in addition to OpenAI’s current enterprise value if they were to issue a payment token. The overall AI services market size is projected to reach $2 trillion in a few years. That translates to $500 billion market cap for a payment utility token alone.

+
+

Component marketplace for AI assets

+

GaiaNet is a developer platform to create your agent services. We provide tools for you to do these.

+
    +
  • Tools to generate finetuning datasets and perform finetuning on CPU and GPU machines.
  • +
  • Tools to ingest documents and create vector embeddings for the knowledge base.
  • +
  • Rust-based SDK to dynamically generate and manage prompts.
  • +
  • Rust-based SDK to extend the agent’s capability for invoking tools and software on the node.
  • +
+

For developers who do not wish to operate nodes, we are building a marketplace for

+
    +
  • finetuned models
  • +
  • knowledge bases and datasets
  • +
  • function-calling plugins
  • +
+

All those components are blockchain-based assets represented by NFTs. A node operator could purchase NFTs for the components it wishes to use, and share service revenue with the component developers. That enables diverse and cashflow-generating assets to be issued from the GaiaNet ecosystem.

+

Conclusion

+

GaiaNet provides open-source tools for individuals and teams to create agent services using their proprietary knowledge and skills. Developers could create finetuned LLMs, knowledge collections, and plugins for the agent, and issue assets based on those components. The GaiaNet protocol makes those nodes discoverable and accessible through GaiaNet domains.

+ + \ No newline at end of file diff --git a/build/1.0.0/node-guide/cli-options/index.html b/build/1.0.0/node-guide/cli-options/index.html new file mode 100644 index 0000000..262f982 --- /dev/null +++ b/build/1.0.0/node-guide/cli-options/index.html @@ -0,0 +1,91 @@ + + + + + +GaiaNet CLI options | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

GaiaNet CLI options

+

After installing the GaiaNet software, you can use the gaianet CLI to manage the node. The following are the CLI options.

+

help

+

You can use gaianet --help to check all the available CLI options.

+
gaianet --help

## Output
Usage: gaianet {config|init|run|stop|OPTIONS}

Subcommands:
config Update the configuration.
init Initialize the GaiaNet node.
run|start Start the GaiaNet node.
stop Stop the GaiaNet node.

Options:
--help Show this help message
+

version

+

You can use gaianet --version to check your GaiaNet version.

+
gaianet --version
+

init

+

The gaianet init command initializes the node according to the $HOME/gaianet/config.json file. You can use some of our pre-set configurations.

+
    +
  • gaianet init will init the default node. It's an RAG application with Gaianet knowledge.
  • +
  • gaianet init --config mua will init a node with the MUA project knowledge.
  • +
  • gaianet init --base <path> will init a node in an alternative directory.
  • +
+

You can also use gaianet init url_your_config_json to init your customized settings for the node. You can customize your node using the Gaianet node link. If you're familiar with the Gaianet config.json, you can create your own manually. See an example here.

+
gaianet init --config https://raw.githubusercontent.com/GaiaNet-AI/node-configs/main/pure-llama-3-8b/config.json
+

start

+

The gaianet start is to start running the node.

+
    +
  • Use gaianet start to start the node according to the $HOME/gaianet/config.json file.
  • +
  • Use gaianet start --base $HOME/gaianet-2.alt to start the node according to the $HOME/gaianet-2/config.json file.
  • +
  • Use gaianet start --local-only to start the node for local use according to the $HOME/gaianet/config.json file.
  • +
+

stop

+

The gaianet stop is to stop the running node.

+
    +
  • Use gaianet stop to stop running the node.
  • +
  • Use gaianet stop --force to force stop the GaiaNet node.
  • +
  • Use gaianet stop --base $HOME/gaianet-2.alt to stop the node according to the $HOME/gaianet-2/config.json file.
  • +
+

config

+

The gaianet config can update the key fields defined in the config.json file.

+
    +
  • gaianet config --help will list all the available arguments
  • +
  • gaianet config --chat-url <url> will change the download link of the chat model.
  • +
  • gaianet config --prompt-template <template> will change the prompt_template of the chat model.
  • +
  • gaianet config --chat-ctx-size <size> will change the context size of the chat model. The default value is 4096.
  • +
  • gaianet config --embedding-url <url> will change the download link of the embedding model.
  • +
  • gaianet config --embedding-ctx-size <size> will change the context size of the embedding model. The value here is associated with the embedding model you choose.
  • +
  • gaianet config --port <port> will change the port of the Gaianet node API server.
  • +
  • gaianet config --system-prompt "<prompt>" will change the system prompt.
  • +
  • gaianet config --rag-prompt "<prompt>" will change the rag prompt.
  • +
  • gaianet config --reverse-prompt "<prompt>" will change the reverse prompt.
  • +
  • gainet config --base <path> will modify the <path>/config.json parameters.
  • +
+

After you use gaianet conifg to change some parameters, please

+
    +
  1. use gaianet init to make your settings take effect.
  2. +
  3. use gaianet start to start your new node.
  4. +
+

If you use gaianet config --base $HOME/gaianet-2.alt to update some settings, please

+
    +
  1. use gaianet init --base $HOME/gaianet-2.alt to make your settings take effect.
  2. +
  3. use gaianet start --base $HOME/gaianet-2.alt to start your new node.
  4. +
+

The gaianet config supports multiple parameters in one command. The example below will change the download link and prompt template of the chat model at the same time.

+
gaianet config --chat-url https://huggingface.co/gaianet/gemma-1.1-2b-it-GGUF/resolve/main/gemma-1.1-2b-it-Q5_K_M.gguf --prompt-template gemma-chat
+

The output is the following.

+
[+] Updating the url of chat model ...
* Old url: https://huggingface.co/gaianet/Llama-3-8B-Instruct-GGUF/resolve/main/Meta-Llama-3-8B-Instruct-Q5_K_M.gguf
* New url: https://huggingface.co/gaianet/gemma-1.1-2b-it-GGUF/resolve/main/gemma-1.1-2b-it-Q5_K_M.gguf

[+] Updating the prompt template of chat model ...
* Old template: llama-3-chat
* New template: gemma-chat

[+] COMPLETED! The config.json is updated successfully.
+

base

+

The --base option is global. You can combine it with other subcommands to specify a base directory for the GaiaNet node other than the $HOME/gaianet.

+ + \ No newline at end of file diff --git a/build/1.0.0/node-guide/customize/index.html b/build/1.0.0/node-guide/customize/index.html new file mode 100644 index 0000000..3a9d41f --- /dev/null +++ b/build/1.0.0/node-guide/customize/index.html @@ -0,0 +1,116 @@ + + + + + +Customize Your GaiaNet Node | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Customize Your GaiaNet Node

+

A key goal of the GaiaNet project is to enable each individual to create and run his or her own +agent service node using finetuned LLMs and proprietary knowledge. In all likelihood, +you are not going to run a node with the default Llama 3.2 3B LLM and Paris guidebook knowledge base. +In this chapter, we will discuss ways to customize your node.

+

Pre-set configurations

+

All the node configuration options, such as LLM settings, vector collection for the knowledge base, and prompts, +are all in the gaianet/config.json file. You can edit this file directly to use your models and vector collections. +Or, you can select a different config.json when you initialize the node. Just pass in a URL to the config.json file +in your gaianet init command. +We have several pre-set config.json files to choose from in this repo. +For example, the following command initializes a GaiaNet node with a Llama 3 8B model.

+
gaianet init --config https://raw.githubusercontent.com/GaiaNet-AI/node-configs/main/llama-3-8b-instruct/config.json
+
+

The URL to the config.json must point to the actual text file. (i.e., the raw.githubusercontent.com URL for GitHub links) instead of the GitHub HTML page for that file.

+
+

The config subcommand

+

After you have initialized the node, you can still make changes to its configuration by editing the config.json file +directly. But it is easier and safer to use the gaianet CLI to make changes.

+
+

You MUST run gaianet init again after you make any changes to the node configuration.

+
+

The following command shows the config.json fields you can make changes to.

+
gaianet config list
+

Now, let's look at some examples.

+

Select an LLM

+

There are over 10,000 finetuned open-source LLMs you can choose from on Huggingface. They each have different sizes (larger models are more capable but more expensive to run), unique capabilities (e.g., uncensored, to excel in math or reasoning, to support large context length etc), domain expertise (e.g., medicine, coding), and / or styles (e.g., to speak like a teacher or a pirate, to respond in code, to follow conversations).

+

To replace GaiaNet node's default LLM with an alternative +finetuned model, you will need to make changes to the model file, prompt template, and model context length parameters. +Those parameters vary depending on the model, but they can be found on the GaiaNet Huggingface organization's model cards. For example, the following command changes the LLM to a Llama 3 8B model.

+
gaianet config \
--chat-url https://huggingface.co/gaianet/Llama-3-8B-Instruct-GGUF/resolve/main/Meta-Llama-3-8B-Instruct-Q5_K_M.gguf \
--chat-ctx-size 4096 \
--prompt-template llama-3-chat
+
+

The llama 3 8B model requires at least 16GB of RAM.

+
+

If none of the published finetuned models are perfect for your use case, you can also finetune your own LLM by following these guides. Your GaiaNet node can run your own finetuned models.

+
+

The --chat-url argument could point to a local file under $HOME/gaianet instead of a public URL. That allows you to use a privately trained or finetuned LLM model file.

+
+

Select a knowledge base

+

A key feature of GaiaNet is that users can create and deploy proprietary knowledge base on the node to supplement +the LLM. Each knowledge base is a snapshot file for a vector collection. +We encourage you to create your own knowledge base. But you can also use +ready-made knowledge bases. You will need to do the following.

+
    +
  • specify the URL to the vector collection (i.e., the snapshot or snapshot.tar.gz file) in the snapshot option.
  • +
  • use the same embedding model that generated this vector collection.
  • +
  • modify the system_prompt to give the model background knowledge.
  • +
  • modify the rag_prompt to instruct the model to answer the question when context is retrieved from the vector collection.
  • +
+

The following example changes the knowledge base in the node from "Paris guidebook" to "London guidebook".

+
gaianet config \
--snapshot https://huggingface.co/datasets/gaianet/london/resolve/main/london_768_nomic-embed-text-v1.5-f16.snapshot.tar.gz \
--embedding-url https://huggingface.co/gaianet/Nomic-embed-text-v1.5-Embedding-GGUF/resolve/main/nomic-embed-text-v1.5.f16.gguf \
--embedding-ctx-size 8192 \
--system-prompt "You are a tour guide in London, UK. Please answer the question from a London visitor accurately." \
--rag-prompt "The following text is the context for the user question.\n----------------\n"
+
+

The --snapshot could point to a local file under $HOME/gaianet instead of a public URL. That allows you to use a private vector collection snapshot.

+
+

Depending on the quality and size of the vectors, you might also need to change the qdrant- options to +customize the retrieval behavior.

+
    +
  • qdrant-limit sets the max number of relevant context to add to the prompt. If your knowledge base consists of large sections of text (i.e., each book chapter is a vector), you should probably make this 1 or 2 to limit the prompt length to a reasonable size.
  • +
  • qdrant-score-threshold is the min match "score" the knowledge content must meet in order to be considered "relevant". This depends on the quality of the knowledge text and the embedding model. In general, this score should be over 0.5 to reduce irrelevant context in the prompt.
  • +
+
+

The embedding model encodes and transforms text into vectors so that they can be stored, searched and retrieved. For different +context material, you might need a different embedding model to achieve the optimal performance. +The MTEB leaderboard is a good place to see the performance +benchmarks of embedding models. You can find many of them in the gaianet organization on Huggingface.

+
+

Customize prompts

+

In config.json, you can also customize the prompts. +Prompts are often tailored for the finetuned LLM or the knowledge +base to generate optimal responses from the node.

+

The --system-prompt option sets a system prompt. It provides the background and "personality" of the node. +Each API request can set its own system prompt.

+

The --rag-prompt is the prompt to be appended after the system prompt (or user query). +It introduces the RAG context retrieved from the vector database, which follows it.

+

The --rag-policy option specifies where the rag-prompt and context should go. +By default, its value is system-message and it puts the context in the system prompt. +But you could also set it to last-user-message, which +puts the rag-prompt and context in front of the latest message from the user.

+

Next steps

+

Remember to re-initialize and re-start the node after you make configuration changes.

+
# If the node is running
# gaianet stop

gaianet init
gaianet start
+

Next, you can

+ +

Have fun!

+ + \ No newline at end of file diff --git a/build/1.0.0/node-guide/install_uninstall/index.html b/build/1.0.0/node-guide/install_uninstall/index.html new file mode 100644 index 0000000..2124e6a --- /dev/null +++ b/build/1.0.0/node-guide/install_uninstall/index.html @@ -0,0 +1,66 @@ + + + + + +Install and uninstall | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Install and uninstall

+

The GaiaNet node utilizes version control from its source GitHub repo. You can check out the GaiaNet node versions from the release page.

+

Install

+

You can install the WasmEdge Runtime on any generic Linux and MacOS platform.

+

Install the latest version of GaiaNet node

+

To install the most recent version of GaiaNet node, run the following command line.

+
curl -sSfL 'https://github.com/GaiaNet-AI/gaianet-node/releases/latest/download/install.sh' | bash
+

The GaiaNet node will be installed in your $HOME/gaianet folder by default.

+
+

If you want to install gaianet in a different directory, you can use curl -sSfL 'https://github.com/GaiaNet-AI/gaianet-node/releases/latest/download/install.sh' | bash -s -- --base <Full_Path> to specify where you want to install GaiaNet. Once you use --base to define a different directory, you should always add --base <Full_Path> to init and start your node. +Here is an example:

+
# Assume that you're in the root directory
mkdir test
curl -sSfL 'https://github.com/GaiaNet-AI/gaianet-node/releases/latest/download/install.sh' | bash -s -- --base $HOME/test
gaianet init --base $HOME/test
gaianet start --base $HOME/test
gaianet stop --base $HOME/test
+
+

Install the specific version of GaiaNet Node

+

If you want to install a particular GaiaNet node version, change the version number in the following command line.

+
curl -sSfL 'https://github.com/GaiaNet-AI/gaianet-node/releases/download/0.1.3/install.sh' | bash
+

Check out the release log here.

+

Update the current Gaianet node

+

Simply run the following command to upgrade your node.

+
curl -sSfL 'https://github.com/GaiaNet-AI/gaianet-node/releases/latest/download/install.sh' | bash -s -- --upgrade
+

The upgrade option will keep your node id.

+

Uninstall

+

To uninstall or clear the environment, run the following command.

+
curl -sSfL 'https://github.com/GaiaNet-AI/gaianet-node/releases/latest/download/uninstall.sh' | bash
+

Important reminder: This command will remove all the GaiaNet-related files, including the nodeid.json. It's your responsibility to keep your nodeid.json safe. If you want to run the same node after reinstalling, please save the nodeid.json file and frpc.toml file carefully.

+

What's installed

+

If you install the GaiaNet node in the $HOME/gaianet directory by default, you will have the following directories and files after installation:

+
    +
  • The $HOME/gaianet/bin directory contains the GaiaNet CLI tool, frpc binary and Qdrant Vector database binary.
  • +
  • The $HOME/gaianet/ directory contains the llamaedge-api-server.wasm and rag-api-server.wasm for the LLM inference, dashboard (chatbot ui), nodeid.json for the registering your node, and gaianet-domain binary.
  • +
  • The $HOME/.wasmedge/bin directory contains the WasmEdge Runtime CLI executable files, which serve as the LLM runtime.
  • +
+

CLI options for the installer

+

You can use the following command line to check out all the available CLI options

+
curl -sSfL 'https://github.com/GaiaNet-AI/gaianet-node/releases/latest/download/install.sh' | bash -s -- --help
+

The output should be as follows. You can use the following options to customize your installation.

+
Usage:
./install.sh [Options]

Options:
--config <Url> Specify a url to the config file
--base <Path> Specify a path to the gaianet base directory
--reinstall Install and download all required deps
--tmpdir <Path> Specify a path to the temporary directory [default: /tmp]
--ggmlcuda [11/12] Install a specific CUDA enabled GGML plugin version [Possible values: 11, 12].
--enable-vector: Install vector log aggregator
--version Print version
--help Print usage
+ + \ No newline at end of file diff --git a/build/1.0.0/node-guide/quick-start/index.html b/build/1.0.0/node-guide/quick-start/index.html new file mode 100644 index 0000000..38f1d1a --- /dev/null +++ b/build/1.0.0/node-guide/quick-start/index.html @@ -0,0 +1,72 @@ + + + + + +Quick start with GaiaNet Node | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Quick start with GaiaNet Node

+

This guide provides the requisite knowledge necessary to quickly get started with installing a GaiaNet node.

+

Prerequisites

+

Before you get started, ensure that you have the following on your system:

+
SystemMinimum Requirements
OSX with Apple Silicon (M1-M4 chip)8GB RAM (16GB recommended)
Ubuntu Linux 20.04 with Nvidia CUDA 12 SDK8GB VRAM on GPU
Azure/AWSNvidia T4 GPU Instance
+

Learn more about system requirements.

+

Installing the node

+
    +
  1. Use the following command to download the latest version of the GaiaNet node:
  2. +
+
curl -sSfL 'https://github.com/GaiaNet-AI/gaianet-node/releases/latest/download/install.sh' | bash
+
    +
  1. +

    Run the command printed on the terminal to set up the environment path, it is started with source. +

    +
  2. +
  3. +

    Use the following command to initialize the GaiaNet node according to the configuration options +in $HOME/gaianet/config.json. +By default, the GaiaNet is initialized with a Llama 3.2 3B LLM and a knowledge base about Paris. +This command could take some time since it will download a very large LLM file.

    +
  4. +
+
gaianet init
+
    +
  1. Use the following command to start your node:
  2. +
+
gaianet start
+

After starting your node

+
    +
  • A successful start prints a public URL for the node. Opening a browser to that URL will display the node information and allow you to chat with the AI agent on the node.
  • +
+
... ... https://0xf63939431ee11267f4855a166e11cc44d24960c0.gaia.domains
+
    +
  • To stop the node: gaianet stop
  • +
+

Next steps

+
    +
  • Customize your node. You probably do not wish to just run the default Phi-3 model and Paris knowledge base.
  • +
  • Register and join the GaiaNet protocol network to receive payments.
  • +
  • Protect the node server to ensure stable service.
  • +
  • Install and manage multiple nodes on a single machine.
  • +
+ + \ No newline at end of file diff --git a/build/1.0.0/node-guide/register/index.html b/build/1.0.0/node-guide/register/index.html new file mode 100644 index 0000000..75c0c2d --- /dev/null +++ b/build/1.0.0/node-guide/register/index.html @@ -0,0 +1,119 @@ + + + + + +Joining the Gaia Protocol | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Joining the Gaia Protocol

+

To join the Gaia protocol, you will need to complete the following two tasks.

+
    +
  • Bind your node by connecting your node ID and device ID.
  • +
  • Join a Gaia domain
  • +
+

Bind your node

+

After successfully running a Gaia node on your machine, it's time to join the Gaia protocol network and get rewards for sharing computing power with the world by binding your node ID and device ID to a Metamask account.

+

When you run a node with the Getting Started guide, you may notice that the Gaia software has generated a node ID for you. The node ID is an ETH address. The easiest way to find the node ID is to use gaianet info to print the node ID and device ID on the terminal.

+
gaianet info
+

The output will be the following:

+
Node ID: 0x80642b1----9a76a284efeb2bb6d142e

Device ID: device-e77---1446f1b51
+

+

To receive rewards, bind your node and device IDs with a Metamask account using the Gaia web portal:

+
    +
  1. Open https://www.gaianet.ai/ on your browser and click "Connect."
  2. +
  3. Log into Metamask using the QR code and connect your account.
  4. +
  5. Hover on your profile and click "Setting" and click "Nodes."
  6. +
  7. Click "Connect new node" and enter your node and device IDs in the boxes.
  8. +
  9. Click "Join"
    +
  10. +
+

After your node has successfully joined the network, it will be displayed in the list of nodes on the Node Page.

+

If you are running multiple nodes, you can bind the node IDs and their corresponding device IDs to your MetaMask wallet.

+

Protect your node ID and device ID

+

The Gaia installer generates a pair of ETH address and keystore and password for your node automatically. This information is stored in the gaianet/nodeid.json file. Please keep the JSON file carefully.

+
    +
  • The ETH address is your node ID. You will use this ETH address to join the Gaia network.
  • +
  • The keystore stores the private key associated with the ETH address encrypted by the password.
  • +
+

The nodeid.json file is the only proof that your node belongs to you. +In many protocol operations, you will need this private key to sign request messages to send to the protocol smart contracts.

+

The device ID is only visible to you.

+

Join a Domain

+

Once your node is successfully bound, you can proceed to join a Gaia Domain. There are two ways to join a domain:

+ +

Steps to Join a Domain from Your Node Management Page

+
    +
  1. +

    Locate Your Nodes
    +Navigate to Profile → Nodes to view the list of nodes you already registered.

    +
  2. +
  3. +

    Initiate the Join Process
    +Click the ... button next to your node and select Join Domain. This will guide you through the steps to join a Gaia Domain.

    +
  4. +
+image +
    +
  1. +

    Follow the Join Steps

    +
      +
    • +

      Update Node Domain
      +Change your node's domain to gaia.domains, which is necessary. The following command line will change your node's domain to gaia.domains. If your node has already used gaia.domains, then you can skip this step.

      +
      gaianet stop
      gaianet config --domain gaia.domains
      gaianet init
      gaianet start
      +
    • +
    • +

      Select a Domain
      +Choose a domain from the available online domain list. You can review essential details for each domain, such as:

      +
        +
      • Required LLM
      • +
      • Join policy
      • +
      • Number of joined nodes
      • +
      +
    • +
    +image +
      +
    • Verify Node Status
      +Ensure your node meets the domain's requirements. If everything checks out, you can submit a join request to the domain.
    • +
    +image +
    +

    Normally, your node needs to be online and meet the specific LLM requirement.

    +
    +
  2. +
+

Steps to Join a Domain from the AI Agent Domains page

+

The AI agent Domains page featured lots of domains various from crypto knowledge to useful tools. Each has options for "Chat Now" or "Join Now". You can click on "Join Now" to join that domain.

+image +

Important Notes

+
    +
  • Some Gaia Domains require approval for new nodes to join.
  • +
  • Ensure you comply with the domain's rules before your node becomes publicly accessible under the domain's URL.
  • +
+

Following these steps will seamlessly integrate your node into a Gaia Domain.

+ + \ No newline at end of file diff --git a/build/1.0.0/node-guide/system-requirements/index.html b/build/1.0.0/node-guide/system-requirements/index.html new file mode 100644 index 0000000..aa7ce01 --- /dev/null +++ b/build/1.0.0/node-guide/system-requirements/index.html @@ -0,0 +1,66 @@ + + + + + +System requirements | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

System requirements

+

You can install the GaiaNet on a wide variety of devices and operating systems with or without GPUs. The node installing and operating instructions work on devices ranging from Raspberry Pi, MacBooks, Linux servers, Windows Desktop, to cloud-based Nvidia H100 clusters. For institutional operators, we recommend EITHER of the following for a GaiaNet node.

+
    +
  • Mac desktop or server computers (i.e., iMac, Mini, Studio or Pro) with Apple Silicon (M1 to M4), and at least 16GB of RAM (32GB or more recommended).
  • +
  • Ubuntu Linux 22.04 server with NVIDIA CUDA 12 SDK installed. At least 8GB of VRAM on the GPU is required (24GB or more recommended). On AWS and Azure, that means GPU instances with at least the Nvidia T4 GPU installed.
  • +
+
+

Check out our tutorial on how to install the NVIDIA driver and the CUDA toolkit on a Ubuntu 22.04 machine.

+
+

If you are hosting the node in your home or office, it needs access to the public Internet to join the GaiaNet network.

+

Supported on

+

GaiaNet node software is designed to be cross-platform, allowing it to run on various CPU and GPU architectures. The GaiaNet installer automatically detects the presence of NVIDIA CUDA drivers and leverages the power of GPU accelerators on the device. More hardware support is on the way.

+

GPU

+

The GaiaNet node can run on all types of NVIDIA GPU products from H100 to NVIDIA Jetson series of hardware. +It also runs on all Apple Silicon M-series GPUs.

+

CPU

+
    +
  • Arm-64 based on CPU chips
  • +
  • X86 based on CPU chips
  • +
  • Apple M1 chips
  • +
  • Apple M1 Pro chips
  • +
  • Apple M1 Max chips
  • +
  • Apple M1 Ultra chips
  • +
  • Apple M2 chips
  • +
  • Apple M2 Pro chips
  • +
  • Apple M2 Max chips
  • +
  • Apple M2 Ultra chips
  • +
  • Apple M3 chips
  • +
  • Apple M3 Pro chips
  • +
  • Apple M3 Max chips
  • +
  • Apple M3 Ultra chips
  • +
+

Oses

+
    +
  • macOS
  • +
  • Linux-like OS
  • +
+ + \ No newline at end of file diff --git a/build/1.0.0/node-guide/tasks/aws/index.html b/build/1.0.0/node-guide/tasks/aws/index.html new file mode 100644 index 0000000..4d7bd4e --- /dev/null +++ b/build/1.0.0/node-guide/tasks/aws/index.html @@ -0,0 +1,65 @@ + + + + + +Start a node on AWS using AMI images | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Start a node on AWS using AMI images

+

We have created a series of public AMIs for you to start GaiaNet nodes in AWS with just a few clicks.

+

Now we have three AMI images available in the Asia Pacific (Osaka) and all the US regions including N. Virginia, Ohio, N. California, and Oregon.

+
AMI Images NameArchitectureRegions
GaiaNet_ubuntu22.04_amd64_cuda12GPUN. Virginia, Ohio, N. California, Oregon, and Osaka
GaiaNet_ubuntu22.04_amd64x86 CPU machinesN. Virginia, Ohio, N. California, Oregon, and Osaka
GaiaNet_ubuntu22.04_arm64ARM CPU machinesN. Virginia, Ohio, N. California, Oregon, and Osaka
+

Running an Nvidia GPU-enabled AWS instance

+

Load the AWS console and sign into your account. Go to EC2 | instances and +click on the "Launch instance" button.

+

In the "Application and OS Images" section, search the AMI catalog and select the image named GaiaNet_ubuntu22.04_amd64_cuda12.

+

+

In the "Instance type" section, select any of the g4dn types. Those are EC2 VMs with Nvidia T4 GPUs.

+

+

In the "Network settings", make sure that you allow SSH connections.

+

+

Click on the "Launch instance" button and wait for the instance to start up. Once the instance is ready, SSH +into its public IP address. Once you are in the VM, run the following two commands.

+
gaianet init
gaianet start
+

The node is ready when it shows The GaiaNet node is started at: https://... on the console. +You can go to that URL from your browser to interact with the GaiaNet node.

+

You can customize your GaiaNet node with your own choice of LLMs and knowledge base snapshots.

+

Running a CPU-only AWS instance

+

Load the AWS console and sign into your account. Go to EC2 | instances and +click on the "Launch instance" button.

+

In the "Application and OS Images" section, search the AMI catalog and select the image named

+
    +
  • GaiaNet_ubuntu22.04_amd64 for x86 CPU machines
  • +
  • GaiaNet_ubuntu22.04_arm64 for ARM CPU machines
  • +
+

In the "Instance type" section, select an instance with at least 8GB of RAM. For example, we recommend t2.large or t2.xlarge instances.

+

In the "Network settings", make sure that you allow SSH connections.

+

Click on the "Launch instance" button and wait for instance to start up. Once the instance is ready, SSH +into its public IP address. Once you are in the VM, run the following two commands.

+
gaianet init
gaianet start
+

The node is ready when it shows The GaiaNet node is started at: https://... on the console. +You can go to that URL from your browser to interact with the GaiaNet node.

+

You can customize your GaiaNet node with your own choice of LLMs and knowledge base snapshots.

+

Good luck!

+ + \ No newline at end of file diff --git a/build/1.0.0/node-guide/tasks/cuda/index.html b/build/1.0.0/node-guide/tasks/cuda/index.html new file mode 100644 index 0000000..1f7bcd6 --- /dev/null +++ b/build/1.0.0/node-guide/tasks/cuda/index.html @@ -0,0 +1,56 @@ + + + + + +Install CUDA on Linux | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Install CUDA on Linux

+

If you are using an Nvidia-enabled VM instance from a public cloud, you should probably use the VM image provided by the cloud. It typically has the correct versions of Nvidia driver and CUDA toolkit already installed. +Read on if you need to install Nvidia driver and CUDA toolkit on your own machine.

+

Ubuntu 22.04

+

1 Install the Nvidia driver.

+

Rebuild the grub configuration:

+
sudo apt-get install -y gcc make linux-headers-$(uname -r)
cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
EOF
sudo sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX="rdblacklist=nouveau"/' /etc/default/grub
sudo update-grub
+

Download and install the Nvidia driver

+
wget https://storage.googleapis.com/nvidia-drivers-us-public/GRID/vGPU16.1/NVIDIA-Linux-x86_64-535.104.05-grid.run
sudo sh NVIDIA-Linux-x86_64-535.104.05-grid.run
+

Confirm the driver is installed successfully

+
nvidia-smi -q | head

==============NVSMI LOG==============

Timestamp : Fri Oct 27 21:54:05 2023
Driver Version : 535.104.05
CUDA Version : 12.2

Attached GPUs : 1
GPU 00000000:00:1E.0
Product Name : NVIDIA A10G
+

Disable GSP and reboot.

+
sudo touch /etc/modprobe.d/nvidia.conf
echo "options nvidia NVreg_EnableGpuFirmware=0" | sudo tee --append /etc/modprobe.d/nvidia.conf
sudo reboot
+

2 Install the CUDA toolkit.

+
wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run
sudo sh cuda_12.2.2_535.104.05_linux.run --silent --override --toolkit --samples --toolkitpath=/usr/local/cuda-12 --samplespath=/usr/local/cuda --no-opengl-libs
+

Confirm that CUDA is installed.

+
/usr/local/cuda/bin/nvcc --version

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Tue_Aug_15_22:02:13_PDT_2023
Cuda compilation tools, release 12.2, V12.2.140
Build cuda_12.2.r12.2/compiler.33191640_0
+

After that, use the following two commands to set up the environment path. You should probably add these two lines to your ~/.bashrc and ~/.bash_profile (or ~/.zshrc and ~/.profile) files so that new terminals and future logins will still be able to find these CUDA library files.

+
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH}
export PATH=/usr/local/cuda/bin:${PATH}
+

More resources

+

Here are more scripts that could help you in case you are stuck.

+ +

Good luck!

+ + \ No newline at end of file diff --git a/build/1.0.0/node-guide/tasks/docker/index.html b/build/1.0.0/node-guide/tasks/docker/index.html new file mode 100644 index 0000000..97f7cfe --- /dev/null +++ b/build/1.0.0/node-guide/tasks/docker/index.html @@ -0,0 +1,86 @@ + + + + + +Start a node with Docker | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Start a node with Docker

+

You can run all the commands in this document without any change on any machine with the latest Docker and at least 8GB of RAM available to the container. +By default, the container uses the CPU to perform computations, which could be slow for large LLMs. For GPUs,

+
    +
  • Mac: Everything here works on Docker Desktop for Mac. However, the Apple GPU cores will not be available inside Docker containers until WebGPU is supported by Docker later in 2024.
  • +
  • Windows and Linux with Nvidia GPU: You will need to install NVIDIA Container Toolkit for Docker. In the instructions below, replace the latest tag with cuda12 or cuda11 to use take advantage of the GPU, and add the --device nvidia.com/gpu=all flag. If you need to build the images yourself, replace Dockerfile with Dockerfile.cuda12 or Dockerfile.cuda11.
  • +
+

Find GaiaNet Docker images you can run!

+

Quick start

+

Start a Docker container for the GaiaNet node. It will print running logs from the GaiaNet node in this terminal.

+
docker run --name gaianet \
-p 8080:8080 \
-v $(pwd)/qdrant_storage:/root/gaianet/qdrant/storage:z \
gaianet/phi-3-mini-instruct-4k_paris:latest
+

The node is ready when it shows The GaiaNet node is started at: https://... on the console. +You can go to that URL from your browser to interact with the GaiaNet node.

+

The docker image contains the LLM and embedding models required by the node. However, the vector +collection snapshot (i.e., knowledge base) is downloaded and imported at the time when the node +starts up. That is because the knowledge based could be updated frequently. The qdrant_storage +directory on the host machine stores the vector database content.

+

Alternatively, the command to run the GaiaNet on your Nvidia CUDA 12 machine is as follows.

+
docker run --name gaianet \
-p 8080:8080 --device nvidia.com/gpu=all \
-v $(pwd)/qdrant_storage:/root/gaianet/qdrant/storage:z \
gaianet/phi-3-mini-instruct-4k_paris:cuda12
+

Stop and re-start

+

You can stop and re-start the node as follows. Every time you re-start, it will re-initailize the vector +collection (knowledge base).

+
docker stop gaianet
docker start gaianet
+

NOTE: When you restart the node, the log messages will no longer be printed to the console. +You will need to wait for a few minutes before the restarted node comes back online. You can still see +the logs by logging into the container as follows.

+
docker exec -it gaianet /bin/bash
tail -f /root/gaianet/log/start-llamaedge.log
+

You can also delete the node if you no longer needs it.

+
docker stop gaianet
docker rm gaianet
+

Make changes to the node

+

You can update the configuration parameters of the node, such as context size for the models, by +executing the config command on the gaianet program inside the container. +For example, the following command changes the chat LLM's context size to 8192 tokens.

+
docker exec -it gaianet /root/gaianet/bin/gaianet config --chat-ctx-size 8192
+

Then, restart the node for the new configuration to take effect. +You will need to wait for a few minutes for the server to start again, or you can monitor +the log files inside the container as discussed above.

+
docker stop gaianet
docker start gaianet
+

Change the node ID

+

You can update the node ID (Ethereum address) associated with the node. Start the node and copy the nodeid.json +file, as well as the keystore file defined in nodeid.json into the container.

+
docker cp /local/path/to/nodeid.json gaianet:/root/gaianet/nodeid.json
docker cp /local/path/to/1234-abcd-key-store gaianet:/root/gaianet/1234-abcd-key-store
+

THen, restart the node for the new address and keystore to take effect.

+
docker stop gaianet
docker start gaianet
+

Build a node image locally

+

Each GaiaNet is defined by a config.json file. It defines the node's required +LLM and embedding models, model parameters, +prompts, and vector snapshots (e.g., knowledge base). +The following command builds a Docker image with two platforms +for a node based on the specified config.json file.

+
docker buildx build . --platform linux/arm64,linux/amd64 \
--tag gaianet/phi-3-mini-instruct-4k_paris:latest -f Dockerfile \
--build-arg CONFIG_URL=https://raw.githubusercontent.com/GaiaNet-AI/gaianet-node/main/config.json
+
+

The Dockerfile is available here. Feel free to change it to Nvidia CUDA versions if your Docker is enabled with the Nvidia container toolkit.

+
+

You can publish your node for other people to use it.

+
docker push gaianet/phi-3-mini-instruct-4k_paris:latest
+

Good luck!

+ + \ No newline at end of file diff --git a/build/1.0.0/node-guide/tasks/local/index.html b/build/1.0.0/node-guide/tasks/local/index.html new file mode 100644 index 0000000..21b1f0e --- /dev/null +++ b/build/1.0.0/node-guide/tasks/local/index.html @@ -0,0 +1,34 @@ + + + + + +Run a local-only node | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Run a local-only node

+

By default, the GaiaNet node registers itself with a GaiaNet domain and is accesible from the public. +For many users, it could also be important to start a local server for testing. To do that, you just +need to pass the --local-only option.

+
gaianet start --local-only
+ + \ No newline at end of file diff --git a/build/1.0.0/node-guide/tasks/multiple/index.html b/build/1.0.0/node-guide/tasks/multiple/index.html new file mode 100644 index 0000000..482b670 --- /dev/null +++ b/build/1.0.0/node-guide/tasks/multiple/index.html @@ -0,0 +1,38 @@ + + + + + +Install multiple nodes on a single machine | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Install multiple nodes on a single machine

+

The default GaiaNet installer installs the node into the $HOME/gaianet base directory. +You could install multiple nodes on the same machine. Each node has its own "base directory". +To do that, you just need to use the --base option.

+

Let's say that the base directory for your second node is $HOME/node-2. +You can install GaiaNet node software using the following command.

+
curl -sSfL 'https://raw.githubusercontent.com/GaiaNet-AI/gaianet-node/main/install.sh' | bash -s -- --base $HOME/node-2
+

After that, you can specify the gaianet CLI to operate on node-2 by appending the --base option as well.

+
gaianet init --base $HOME/node-2
gaianet start --base $HOME/node-2
+ + \ No newline at end of file diff --git a/build/1.0.0/node-guide/tasks/protect/index.html b/build/1.0.0/node-guide/tasks/protect/index.html new file mode 100644 index 0000000..098aa85 --- /dev/null +++ b/build/1.0.0/node-guide/tasks/protect/index.html @@ -0,0 +1,45 @@ + + + + + +Protect the server process | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Protect the server process

+

Sometimes, the OS could kill the wasmedge process on the GaiaNet node if it consumes too much resources. For production +servers, you should protect the server process.

+

Use Supervise

+

The supervise tool can help us monitor the wasmedge process, and automatically restart the process +in case the process dies or is killed. +The gaianet CLI will make use of supervise automatically if it is installed on the system.

+

For macOS users, you can install supervise via the daemontools tool by running the following command.

+
brew install daemontools
+

For Linux users, please refer to the installation guide to install the daemontools tool.

+

Reduce the nice value

+

If the supervise tool is too heavy handed, we could also increase the priority of the wasmedge process. The OS +will try NOT to kill high priority processes until it absolutely has to. We do that by reducing the nice value +of the wasmedge process.

+
sudo renice -n -19 $(cat $HOME/gaianet/llamaedge.pid)
+

Good luck!

+ + \ No newline at end of file diff --git a/build/1.0.0/node-guide/troubleshooting/index.html b/build/1.0.0/node-guide/troubleshooting/index.html new file mode 100644 index 0000000..a5c7b48 --- /dev/null +++ b/build/1.0.0/node-guide/troubleshooting/index.html @@ -0,0 +1,90 @@ + + + + + +Troubleshooting | Gaia + + + + + + + + + + + + + + + + + + + + + +
Skip to main content
Version: 1.0.0

Troubleshooting

+

The system cannot find CUDA libraries

+

Sometimes, the CUDA toolkit is installed in a non-standard location. The error message here is often not able to find libcu*12. For example, you might have CUDA installed with your Python setup. The following command would install CUDA into Python's environment.

+
sudo apt install python3-pip -y
pip3 install --upgrade fschat accelerate autoawq vllm
+

The easiest way to fix is simply to link those non-standard CUDA libraries to the standard location, like this.

+
ln -s /usr/local/lib/python3.10/dist-packages/nvidia/cublas/lib/libcublas.so.12 /usr/lib/libcublas.so.12
ln -s /usr/local/lib/python3.10/dist-packages/nvidia/cuda_runtime/lib/libcudart.so.12 /usr/lib/libcudart.so.12
ln -s /usr/local/lib/python3.10/dist-packages/nvidia/cublas/lib/libcublasLt.so.12 /usr/lib/libcublasLt.so.12
+

Failed to recover from collection snapshot on Windows WSL

+

On Windows WSL, you could see this error while running gaianet init.

+
   * Import the Qdrant collection snapshot ...
The process may take a few minutes. Please wait ...
* [Error] Failed to recover from the collection snapshot. {"status":{"error":"Service internal error: Tokio task join error: task 1242 panicked"},"time":0.697784244}
+

When you look into the ~/gaianet/log/init-qdrant.log file, you could see this line of error

+
2024-05-20T07:24:52.900895Z ERROR qdrant::startup: Panic occurred in file /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/cgroups-rs-0.3.4/src/memory.rs at line 587: called `Result::unwrap()` on an `Err` value: Error { kind: ReadFailed("/sys/fs/cgroup/memory.high"), cause: Some(Os { code: 2, kind: NotFound, message: "No such file or directory" }) }  
+

The solution is to disable the autoMemoryReclaim feature in WSL. Step to turn on/off this feature:

+
    +
  1. Edit C:\Users<Your user name>.wslconfig
  2. +
  3. Remove or comment out autoMemoryReclaim in [experimental] section.
  4. +
+

+

Thanks to RoggeOhta for discovering this. You can learn more about it here.

+

Failed to start the node with an error message Port 8080 is in use. Exit ...

+

You may see the following error when you run gaianet start.

+
gaianet start
[+] Checking the config.json file ...

You already have a private key.
[+] Starting LlamaEdge API Server ...

Port 8080 is in use. Exit ...
+

The solution is to run gaianet stop first to kill all processes, and then run gaianet start to start the node.

+

Load library failed: libgomp.so.1: cannot open shared object file: No such file or directory

+

On Windows WSL, you may see this error when running curl -sSfL 'https://github.com/GaiaNet-AI/gaianet-node/releases/latest/download/install.sh' | bash

+
* Generate node IS
[2024-07-02 17:50:55.175] [error] loading failed: invalid path, Code: 0x20
[2024-07-02 17:50:55.175] [error] Load library failed: libgomp.so.1: cannot open shared object file: No such file or directory
[2024-07-02 17:50:55.176] [error] loading failed: invalid path, Code: 0x20
[2024-07-02 17:50:55.176] [error] Load library failed: libgomp.so.1: cannot open shared object file: No such file or directory
+

The error is caused by the lack of libgomp.so.1, a library that should be automatically installed on Ubuntu by default.

+

To solve this, you must install the libgomp.so.1 library.

+
sudo apt-get update
sudo apt-get install libgomp1
+

If you're using CentOS, you can use

+
yum install libgomp
+

This issue was fixed in version 0.2.2.

+

Failed to remove the default collection

+
Failed to remove the default collection. {"status":{"error":"Service internal error: No such file or directory (os error 2)"},"time":0.050924542}
+

It typically indicates that the Qdrant instance was not shut down properly before you try to init it again with a new snapshot. The solution is to stop the GaiaNet node first.

+
gaianet stop
+

Alternatively, you could manually kill the processes from the terminal or in the OS's Activity Monitor.

+
sudo pkill -9 qdrant
sudo pkill -9 wasmedge
sudo pkill -9 frpc
+

Then you can run gaianet init and then gaianet start again.

+

File I/O error

+
    * Import the Qdrant collection snapshot ...
The process may take a few minutes. Please wait ...
* [Error] Failed to recover from the collection snapshot. An error occurred processing field `snapshot`: File I/O error: Operation not permitted (os error 1)
+

It typically indicates that the Qdrant instance was not shut down properly before you try to init it again with a new snapshot. The solution is to stop the GaiaNet node first.

+
gaianet stop
+

Alternatively, you could manually kill the processes from the terminal or in the OS's Activity Monitor.

+
sudo pkill -9 qdrant
sudo pkill -9 wasmedge
sudo pkill -9 frpc
+

Then you can run gaianet init and then gaianet start again.

+

The "Failed to open the file" Error

+
Warning: Failed to open the file 
Warning: https://huggingface.co/datasets/max-id/gaianet-qdrant-snapshot/resolve
Warning: /main/consensus/consensus.snapshot: No such file or directory
curl: (23) Failure writing output to destination
+

The reason for this type of error is a mis-configured config.json file. The solution is to delete the comments in config.json and re-run the gaianet init command.

+

The "Too many open files" Error on macOS

+

When running gaianet init to initialize a new node on macOS, you may encounter an error related to snapshot recovery if your snapshot contains a large amount of text. The error message may be the following:

+
 * [Error] Failed to recover from the collection snapshot. {"status":{"error":"Service internal error: Too many open files (os error 24)"},"time":1.574064833}
* [Error] Failed to recover from the collection snapshot. {"status":{"error":"Service internal error: Too many open files (os error 24)"},"time":1.574064833}
+

This issue is caused by the default file descriptor (FD) limit on macOS, which is set to a relatively low value of 256.

+

To resolve this issue, you can increase the default FD limit on your system. To do so, run the following command:

+
ulimit -n 10000
+

This will temporarily set the FD limit to 10,000. Next, use gaianet init and gaianet start commands in the SAME terminal.

+

Permission denied when use the installer script to install WasmEdge

+

When running curl -sSfL 'https://github.com/GaiaNet-AI/gaianet-node/releases/latest/download/install.sh' | bash to install GaiaNet node software, you may meet the permission denied error especially installing the WasmEdge runtime.

+

+

This error is caused by the lack of /tmp write permission. You can use --tmpdir to specify where you want to install the WasmEdge runtime. Please note, you will need to have written permission to the <YOUR_PATH> folder.

+
curl -sSfL 'https://github.com/GaiaNet-AI/gaianet-node/releases/latest/download/install.sh' | bash -s -- --tmpdir YOUR_PATH
+

This problem is fixed in version 0.2.3.

+ + \ No newline at end of file diff --git a/build/1.0.0/search-index.json b/build/1.0.0/search-index.json new file mode 100644 index 0000000..c94767a --- /dev/null +++ b/build/1.0.0/search-index.json @@ -0,0 +1 @@ +[{"documents":[{"i":555,"t":"llama.cpp","u":"/1.0.0/creator-guide/finetune/llamacpp","b":["Creator Guide","GaiaNet Node with finetuned LLMs"]},{"i":567,"t":"Knowledge base from source / summary pairs","u":"/1.0.0/creator-guide/knowledge/csv","b":["Creator Guide","Knowledge bases"]},{"i":581,"t":"Gaia nodes with long-term knowledge","u":"/1.0.0/creator-guide/knowledge/concepts","b":["Creator Guide","Knowledge bases"]},{"i":593,"t":"Fine-tune LLMs","u":"/1.0.0/creator-guide/finetune/intro","b":["Creator Guide","GaiaNet Node with finetuned LLMs"]},{"i":595,"t":"Knowledge base from a markdown file","u":"/1.0.0/creator-guide/knowledge/markdown","b":["Creator Guide","Knowledge bases"]},{"i":609,"t":"Quick Start with Launching Gaia Domain","u":"/1.0.0/domain-guide/quick-start","b":["Domain Operator Guide"]},{"i":613,"t":"Knowledge base from a URL","u":"/1.0.0/creator-guide/knowledge/firecrawl","b":["Creator Guide","Knowledge bases"]},{"i":619,"t":"GaiaNet: GenAI Agent Network","u":"/1.0.0/litepaper","b":[]},{"i":636,"t":"Knowledge base from a PDF file","u":"/1.0.0/creator-guide/knowledge/pdf","b":["Creator Guide","Knowledge bases"]},{"i":645,"t":"GaiaNet CLI options","u":"/1.0.0/node-guide/cli-options","b":["Node Operator Guide"]},{"i":661,"t":"Quick start with GaiaNet Node","u":"/1.0.0/node-guide/quick-start","b":["Node Operator Guide"]},{"i":669,"t":"System requirements","u":"/1.0.0/node-guide/system-requirements","b":["Node Operator Guide"]},{"i":679,"t":"Joining the Gaia Protocol","u":"/1.0.0/node-guide/register","b":["Node Operator Guide"]},{"i":693,"t":"Customize Your GaiaNet Node","u":"/1.0.0/node-guide/customize","b":["Node Operator Guide"]},{"i":707,"t":"Overview","u":"/1.0.0/intro","b":[]},{"i":718,"t":"Start a node on AWS using AMI images","u":"/1.0.0/node-guide/tasks/aws","b":["Node Operator Guide","How do I ..."]},{"i":724,"t":"Start a node with Docker","u":"/1.0.0/node-guide/tasks/docker","b":["Node Operator Guide","How do I ..."]},{"i":736,"t":"Install and uninstall","u":"/1.0.0/node-guide/install_uninstall","b":["Node Operator Guide"]},{"i":752,"t":"Protect the server process","u":"/1.0.0/node-guide/tasks/protect","b":["Node Operator Guide","How do I ..."]},{"i":758,"t":"Install CUDA on Linux","u":"/1.0.0/node-guide/tasks/cuda","b":["Node Operator Guide","How do I ..."]},{"i":767,"t":"Troubleshooting","u":"/1.0.0/node-guide/troubleshooting","b":["Node Operator Guide"]},{"i":786,"t":"Working with Coinbase AgentKit","u":"/1.0.0/tutorial/coinbase","b":["Tutorial"]},{"i":792,"t":"Install multiple nodes on a single machine","u":"/1.0.0/node-guide/tasks/multiple","b":["Node Operator Guide","How do I ..."]},{"i":794,"t":"Run a local-only node","u":"/1.0.0/node-guide/tasks/local","b":["Node Operator Guide","How do I ..."]},{"i":796,"t":"Agentic translation on GaiaNet","u":"/1.0.0/tutorial/translator-agent","b":["Tutorial"]},{"i":822,"t":"Working with eliza","u":"/1.0.0/tutorial/eliza","b":["Tutorial"]},{"i":828,"t":"CodeGPT","u":"/1.0.0/user-guide/apps/codegpt","b":["User Guide","Agent frameworks and apps"]},{"i":838,"t":"Agent Zero","u":"/1.0.0/user-guide/apps/agent-zero","b":["User Guide","Agent frameworks and apps"]},{"i":856,"t":"Anything LLM","u":"/1.0.0/user-guide/apps/anything_llm","b":["User Guide","Agent frameworks and apps"]},{"i":860,"t":"Knowledge base from a plain text file","u":"/1.0.0/creator-guide/knowledge/text","b":["Creator Guide","Knowledge bases"]},{"i":874,"t":"Calling external tools","u":"/1.0.0/tutorial/tool-call","b":["Tutorial"]},{"i":884,"t":"AI coding assistant: Continue","u":"/1.0.0/user-guide/apps/continue","b":["User Guide","Agent frameworks and apps"]},{"i":894,"t":"Dify + GaiaNet","u":"/1.0.0/user-guide/apps/dify","b":["User Guide","Agent frameworks and apps"]},{"i":898,"t":"FlowiseAI RAG chat","u":"/1.0.0/user-guide/apps/flowiseai","b":["User Guide","Agent frameworks and apps"]},{"i":918,"t":"A planning agent","u":"/1.0.0/user-guide/apps/gpt-planner","b":["User Guide","Agent frameworks and apps"]},{"i":924,"t":"FlowiseAI tool call","u":"/1.0.0/user-guide/apps/flowiseai-tool-call","b":["User Guide","Agent frameworks and apps"]},{"i":934,"t":"LlamaEdgeBook","u":"/1.0.0/user-guide/apps/llamaedgebook","b":["User Guide","Agent frameworks and apps"]},{"i":938,"t":"OpenAI ecosystem apps","u":"/1.0.0/user-guide/apps/intro","b":["User Guide","Agent frameworks and apps"]},{"i":944,"t":"Cursor AI IDE","u":"/1.0.0/user-guide/apps/cursor","b":["User Guide","Agent frameworks and apps"]},{"i":952,"t":"API Reference","u":"/1.0.0/user-guide/api-reference","b":["User Guide"]},{"i":968,"t":"LlamaCoder","u":"/1.0.0/user-guide/apps/llamacoder","b":["User Guide","Agent frameworks and apps"]},{"i":974,"t":"LlamaTutor","u":"/1.0.0/user-guide/apps/llamatutor","b":["User Guide","Agent frameworks and apps"]},{"i":980,"t":"LlamaCloud","u":"/1.0.0/user-guide/apps/llamaparse","b":["User Guide","Agent frameworks and apps"]},{"i":986,"t":"Open WebUI","u":"/1.0.0/user-guide/apps/openwebui","b":["User Guide","Agent frameworks and apps"]},{"i":996,"t":"LobeChat","u":"/1.0.0/user-guide/apps/lobechat","b":["User Guide","Agent frameworks and apps"]},{"i":1000,"t":"Stockbot","u":"/1.0.0/user-guide/apps/stockbot","b":["User Guide","Agent frameworks and apps"]},{"i":1006,"t":"Public GaiaNet nodes","u":"/1.0.0/user-guide/nodes","b":["User Guide"]},{"i":1029,"t":"Use my GaiaNet node","u":"/1.0.0/user-guide/mynode","b":["User Guide"]},{"i":1035,"t":"Translation Agent + GaiaNet","u":"/1.0.0/user-guide/apps/translation-agent","b":["User Guide","Agent frameworks and apps"]},{"i":1043,"t":"Obsidian","u":"/1.0.0/user-guide/apps/obsidian","b":["User Guide","Agent frameworks and apps"]},{"i":1068,"t":"Zed","u":"/1.0.0/user-guide/apps/zed","b":["User Guide","Agent frameworks and apps"]},{"i":1076,"t":"Build a knowledge base using Gaia web tool","u":"/1.0.0/creator-guide/knowledge/web-tool","b":["Creator Guide","Knowledge bases"]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/555",[0,4.04,1,4.04]],["t/567",[2,1.482,3,1.59,4,2.702,5,2.702,6,2.702]],["t/581",[2,1.482,7,1.869,8,1.303,9,2.702,10,2.702]],["t/593",[11,3.468,12,3.468,13,2.971]],["t/595",[2,1.666,3,1.788,14,3.037,15,2.315]],["t/609",[7,1.869,16,2.315,17,1.869,18,2.702,19,2.702]],["t/613",[2,1.902,3,2.041,20,3.468]],["t/619",[21,1.465,22,3.037,23,1.93,24,3.037]],["t/636",[2,1.666,3,1.788,15,2.315,25,3.037]],["t/645",[21,1.672,26,3.468,27,3.468]],["t/661",[8,1.465,16,2.602,17,2.101,21,1.465]],["t/669",[28,4.04,29,4.04]],["t/679",[7,2.399,30,3.468,31,3.468]],["t/693",[8,1.672,21,1.672,32,3.468]],["t/707",[33,4.839]],["t/718",[8,1.173,17,1.683,34,2.433,35,1.855,36,2.433,37,2.433]],["t/724",[8,1.672,17,2.399,38,3.468]],["t/736",[39,3.08,40,4.04]],["t/752",[41,3.468,42,3.468,43,3.468]],["t/758",[39,2.643,44,3.468,45,3.468]],["t/767",[46,4.839]],["t/786",[47,2.971,48,3.468,49,3.468]],["t/792",[8,1.303,39,2.06,50,2.702,51,2.702,52,2.702]],["t/794",[8,1.672,53,3.468,54,3.468]],["t/796",[21,1.672,23,2.204,55,2.971]],["t/822",[47,3.461,56,4.04]],["t/828",[57,4.839]],["t/838",[23,2.568,58,4.04]],["t/856",[13,3.461,59,4.04]],["t/860",[2,1.482,3,1.59,15,2.06,60,2.702,61,2.702]],["t/874",[62,2.971,63,3.468,64,2.643]],["t/884",[65,2.602,66,3.037,67,3.037,68,3.037]],["t/894",[21,1.948,69,4.04]],["t/898",[70,2.971,71,3.468,72,3.468]],["t/918",[23,2.568,73,4.04]],["t/924",[62,2.971,64,2.643,70,2.971]],["t/934",[74,4.839]],["t/938",[75,3.468,76,3.468,77,3.468]],["t/944",[65,2.971,78,3.468,79,3.468]],["t/952",[80,4.04,81,4.04]],["t/968",[82,4.839]],["t/974",[83,4.839]],["t/980",[84,4.839]],["t/986",[85,4.04,86,4.04]],["t/996",[87,4.839]],["t/1000",[88,4.839]],["t/1006",[8,1.672,21,1.672,89,3.468]],["t/1029",[8,1.672,21,1.672,35,2.643]],["t/1035",[21,1.672,23,2.204,55,2.971]],["t/1043",[90,4.839]],["t/1068",[91,4.839]],["t/1076",[2,1.214,3,1.303,7,1.531,35,1.687,64,1.687,92,2.213,93,2.213]]],"invertedIndex":[["agent",{"_index":23,"t":{"619":{"position":[[15,5]]},"796":{"position":[[0,7]]},"838":{"position":[[0,5]]},"918":{"position":[[11,5]]},"1035":{"position":[[12,5]]}}}],["agentkit",{"_index":49,"t":{"786":{"position":[[22,8]]}}}],["ai",{"_index":65,"t":{"884":{"position":[[0,2]]},"944":{"position":[[7,2]]}}}],["ami",{"_index":36,"t":{"718":{"position":[[26,3]]}}}],["anyth",{"_index":59,"t":{"856":{"position":[[0,8]]}}}],["api",{"_index":80,"t":{"952":{"position":[[0,3]]}}}],["app",{"_index":77,"t":{"938":{"position":[[17,4]]}}}],["assist",{"_index":67,"t":{"884":{"position":[[10,9]]}}}],["aw",{"_index":34,"t":{"718":{"position":[[16,3]]}}}],["base",{"_index":3,"t":{"567":{"position":[[10,4]]},"595":{"position":[[10,4]]},"613":{"position":[[10,4]]},"636":{"position":[[10,4]]},"860":{"position":[[10,4]]},"1076":{"position":[[18,4]]}}}],["build",{"_index":92,"t":{"1076":{"position":[[0,5]]}}}],["call",{"_index":62,"t":{"874":{"position":[[0,7]]},"924":{"position":[[15,4]]}}}],["chat",{"_index":72,"t":{"898":{"position":[[14,4]]}}}],["cli",{"_index":26,"t":{"645":{"position":[[8,3]]}}}],["code",{"_index":66,"t":{"884":{"position":[[3,6]]}}}],["codegpt",{"_index":57,"t":{"828":{"position":[[0,7]]}}}],["coinbas",{"_index":48,"t":{"786":{"position":[[13,8]]}}}],["continu",{"_index":68,"t":{"884":{"position":[[21,8]]}}}],["cpp",{"_index":1,"t":{"555":{"position":[[6,3]]}}}],["cuda",{"_index":44,"t":{"758":{"position":[[8,4]]}}}],["cursor",{"_index":78,"t":{"944":{"position":[[0,6]]}}}],["custom",{"_index":32,"t":{"693":{"position":[[0,9]]}}}],["difi",{"_index":69,"t":{"894":{"position":[[0,4]]}}}],["docker",{"_index":38,"t":{"724":{"position":[[18,6]]}}}],["domain",{"_index":19,"t":{"609":{"position":[[32,6]]}}}],["ecosystem",{"_index":76,"t":{"938":{"position":[[7,9]]}}}],["eliza",{"_index":56,"t":{"822":{"position":[[13,5]]}}}],["extern",{"_index":63,"t":{"874":{"position":[[8,8]]}}}],["file",{"_index":15,"t":{"595":{"position":[[31,4]]},"636":{"position":[[26,4]]},"860":{"position":[[33,4]]}}}],["fine",{"_index":11,"t":{"593":{"position":[[0,4]]}}}],["flowiseai",{"_index":70,"t":{"898":{"position":[[0,9]]},"924":{"position":[[0,9]]}}}],["gaia",{"_index":7,"t":{"581":{"position":[[0,4]]},"609":{"position":[[27,4]]},"679":{"position":[[12,4]]},"1076":{"position":[[29,4]]}}}],["gaianet",{"_index":21,"t":{"619":{"position":[[0,7]]},"645":{"position":[[0,7]]},"661":{"position":[[17,7]]},"693":{"position":[[15,7]]},"796":{"position":[[23,7]]},"894":{"position":[[7,7]]},"1006":{"position":[[7,7]]},"1029":{"position":[[7,7]]},"1035":{"position":[[21,7]]}}}],["genai",{"_index":22,"t":{"619":{"position":[[9,5]]}}}],["id",{"_index":79,"t":{"944":{"position":[[10,3]]}}}],["imag",{"_index":37,"t":{"718":{"position":[[30,6]]}}}],["instal",{"_index":39,"t":{"736":{"position":[[0,7]]},"758":{"position":[[0,7]]},"792":{"position":[[0,7]]}}}],["join",{"_index":30,"t":{"679":{"position":[[0,7]]}}}],["knowledg",{"_index":2,"t":{"567":{"position":[[0,9]]},"581":{"position":[[26,9]]},"595":{"position":[[0,9]]},"613":{"position":[[0,9]]},"636":{"position":[[0,9]]},"860":{"position":[[0,9]]},"1076":{"position":[[8,9]]}}}],["launch",{"_index":18,"t":{"609":{"position":[[17,9]]}}}],["linux",{"_index":45,"t":{"758":{"position":[[16,5]]}}}],["llama",{"_index":0,"t":{"555":{"position":[[0,5]]}}}],["llamacloud",{"_index":84,"t":{"980":{"position":[[0,10]]}}}],["llamacod",{"_index":82,"t":{"968":{"position":[[0,10]]}}}],["llamaedgebook",{"_index":74,"t":{"934":{"position":[[0,13]]}}}],["llamatutor",{"_index":83,"t":{"974":{"position":[[0,10]]}}}],["llm",{"_index":13,"t":{"593":{"position":[[10,4]]},"856":{"position":[[9,3]]}}}],["lobechat",{"_index":87,"t":{"996":{"position":[[0,8]]}}}],["local",{"_index":54,"t":{"794":{"position":[[6,5]]}}}],["long",{"_index":9,"t":{"581":{"position":[[16,4]]}}}],["machin",{"_index":52,"t":{"792":{"position":[[35,7]]}}}],["markdown",{"_index":14,"t":{"595":{"position":[[22,8]]}}}],["multipl",{"_index":50,"t":{"792":{"position":[[8,8]]}}}],["network",{"_index":24,"t":{"619":{"position":[[21,7]]}}}],["node",{"_index":8,"t":{"581":{"position":[[5,5]]},"661":{"position":[[25,4]]},"693":{"position":[[23,4]]},"718":{"position":[[8,4]]},"724":{"position":[[8,4]]},"792":{"position":[[17,5]]},"794":{"position":[[17,4]]},"1006":{"position":[[15,5]]},"1029":{"position":[[15,4]]}}}],["obsidian",{"_index":90,"t":{"1043":{"position":[[0,8]]}}}],["open",{"_index":85,"t":{"986":{"position":[[0,4]]}}}],["openai",{"_index":75,"t":{"938":{"position":[[0,6]]}}}],["option",{"_index":27,"t":{"645":{"position":[[12,7]]}}}],["overview",{"_index":33,"t":{"707":{"position":[[0,8]]}}}],["pair",{"_index":6,"t":{"567":{"position":[[37,5]]}}}],["pdf",{"_index":25,"t":{"636":{"position":[[22,3]]}}}],["plain",{"_index":60,"t":{"860":{"position":[[22,5]]}}}],["plan",{"_index":73,"t":{"918":{"position":[[2,8]]}}}],["process",{"_index":43,"t":{"752":{"position":[[19,7]]}}}],["protect",{"_index":41,"t":{"752":{"position":[[0,7]]}}}],["protocol",{"_index":31,"t":{"679":{"position":[[17,8]]}}}],["public",{"_index":89,"t":{"1006":{"position":[[0,6]]}}}],["quick",{"_index":16,"t":{"609":{"position":[[0,5]]},"661":{"position":[[0,5]]}}}],["rag",{"_index":71,"t":{"898":{"position":[[10,3]]}}}],["refer",{"_index":81,"t":{"952":{"position":[[4,9]]}}}],["requir",{"_index":29,"t":{"669":{"position":[[7,12]]}}}],["run",{"_index":53,"t":{"794":{"position":[[0,3]]}}}],["server",{"_index":42,"t":{"752":{"position":[[12,6]]}}}],["singl",{"_index":51,"t":{"792":{"position":[[28,6]]}}}],["sourc",{"_index":4,"t":{"567":{"position":[[20,6]]}}}],["start",{"_index":17,"t":{"609":{"position":[[6,5]]},"661":{"position":[[6,5]]},"718":{"position":[[0,5]]},"724":{"position":[[0,5]]}}}],["stockbot",{"_index":88,"t":{"1000":{"position":[[0,8]]}}}],["summari",{"_index":5,"t":{"567":{"position":[[29,7]]}}}],["system",{"_index":28,"t":{"669":{"position":[[0,6]]}}}],["term",{"_index":10,"t":{"581":{"position":[[21,4]]}}}],["text",{"_index":61,"t":{"860":{"position":[[28,4]]}}}],["tool",{"_index":64,"t":{"874":{"position":[[17,5]]},"924":{"position":[[10,4]]},"1076":{"position":[[38,4]]}}}],["translat",{"_index":55,"t":{"796":{"position":[[8,11]]},"1035":{"position":[[0,11]]}}}],["troubleshoot",{"_index":46,"t":{"767":{"position":[[0,15]]}}}],["tune",{"_index":12,"t":{"593":{"position":[[5,4]]}}}],["uninstal",{"_index":40,"t":{"736":{"position":[[12,9]]}}}],["url",{"_index":20,"t":{"613":{"position":[[22,3]]}}}],["us",{"_index":35,"t":{"718":{"position":[[20,5]]},"1029":{"position":[[0,3]]},"1076":{"position":[[23,5]]}}}],["web",{"_index":93,"t":{"1076":{"position":[[34,3]]}}}],["webui",{"_index":86,"t":{"986":{"position":[[5,5]]}}}],["work",{"_index":47,"t":{"786":{"position":[[0,7]]},"822":{"position":[[0,7]]}}}],["zed",{"_index":91,"t":{"1068":{"position":[[0,3]]}}}],["zero",{"_index":58,"t":{"838":{"position":[[6,4]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":557,"t":"Build the fine-tune utility from llama.cpp","u":"/1.0.0/creator-guide/finetune/llamacpp","h":"#build-the-fine-tune-utility-from-llamacpp","p":555},{"i":559,"t":"Get the base model","u":"/1.0.0/creator-guide/finetune/llamacpp","h":"#get-the-base-model","p":555},{"i":561,"t":"Create a question and answer set for fine-tuning","u":"/1.0.0/creator-guide/finetune/llamacpp","h":"#create-a-question-and-answer-set-for-fine-tuning","p":555},{"i":563,"t":"Finetune!","u":"/1.0.0/creator-guide/finetune/llamacpp","h":"#finetune","p":555},{"i":565,"t":"Merge","u":"/1.0.0/creator-guide/finetune/llamacpp","h":"#merge","p":555},{"i":569,"t":"Prerequisites","u":"/1.0.0/creator-guide/knowledge/csv","h":"#prerequisites","p":567},{"i":571,"t":"Start a vector database","u":"/1.0.0/creator-guide/knowledge/csv","h":"#start-a-vector-database","p":567},{"i":573,"t":"Create the vector collection snapshot","u":"/1.0.0/creator-guide/knowledge/csv","h":"#create-the-vector-collection-snapshot","p":567},{"i":575,"t":"Options","u":"/1.0.0/creator-guide/knowledge/csv","h":"#options","p":567},{"i":577,"t":"Create a vector snapshot","u":"/1.0.0/creator-guide/knowledge/csv","h":"#create-a-vector-snapshot","p":567},{"i":579,"t":"Next steps","u":"/1.0.0/creator-guide/knowledge/csv","h":"#next-steps","p":567},{"i":583,"t":"Workflow for creating knowledge embeddings","u":"/1.0.0/creator-guide/knowledge/concepts","h":"#workflow-for-creating-knowledge-embeddings","p":581},{"i":585,"t":"Lifecycle of a user query on a knowledge-supplemented LLM","u":"/1.0.0/creator-guide/knowledge/concepts","h":"#lifecycle-of-a-user-query-on-a-knowledge-supplemented-llm","p":581},{"i":587,"t":"Ask a question","u":"/1.0.0/creator-guide/knowledge/concepts","h":"#ask-a-question","p":581},{"i":589,"t":"Retrieve similar embeddings","u":"/1.0.0/creator-guide/knowledge/concepts","h":"#retrieve-similar-embeddings","p":581},{"i":591,"t":"Response to the user query","u":"/1.0.0/creator-guide/knowledge/concepts","h":"#response-to-the-user-query","p":581},{"i":597,"t":"Prerequisites","u":"/1.0.0/creator-guide/knowledge/markdown","h":"#prerequisites","p":595},{"i":599,"t":"Start a vector database","u":"/1.0.0/creator-guide/knowledge/markdown","h":"#start-a-vector-database","p":595},{"i":601,"t":"Create the vector collection snapshot","u":"/1.0.0/creator-guide/knowledge/markdown","h":"#create-the-vector-collection-snapshot","p":595},{"i":603,"t":"Options","u":"/1.0.0/creator-guide/knowledge/markdown","h":"#options","p":595},{"i":605,"t":"Create a vector snapshot","u":"/1.0.0/creator-guide/knowledge/markdown","h":"#create-a-vector-snapshot","p":595},{"i":607,"t":"Next steps","u":"/1.0.0/creator-guide/knowledge/markdown","h":"#next-steps","p":595},{"i":611,"t":"Steps to Launch Your Gaia Domain","u":"/1.0.0/domain-guide/quick-start","h":"#steps-to-launch-your-gaia-domain","p":609},{"i":615,"t":"Parse the URL content to a markdown file","u":"/1.0.0/creator-guide/knowledge/firecrawl","h":"#parse-the-url-content-to-a-markdown-file","p":613},{"i":617,"t":"Create embeddings from the markdown files","u":"/1.0.0/creator-guide/knowledge/firecrawl","h":"#create-embeddings-from-the-markdown-files","p":613},{"i":620,"t":"Abstract","u":"/1.0.0/litepaper","h":"#abstract","p":619},{"i":622,"t":"Introduction","u":"/1.0.0/litepaper","h":"#introduction","p":619},{"i":624,"t":"Open-source and decentralization","u":"/1.0.0/litepaper","h":"#open-source-and-decentralization","p":619},{"i":626,"t":"GaiaNet node","u":"/1.0.0/litepaper","h":"#gaianet-node","p":619},{"i":628,"t":"GaiaNet network","u":"/1.0.0/litepaper","h":"#gaianet-network","p":619},{"i":630,"t":"GaiaNet token","u":"/1.0.0/litepaper","h":"#gaianet-token","p":619},{"i":632,"t":"Component marketplace for AI assets","u":"/1.0.0/litepaper","h":"#component-marketplace-for-ai-assets","p":619},{"i":634,"t":"Conclusion","u":"/1.0.0/litepaper","h":"#conclusion","p":619},{"i":638,"t":"Tools to convert a PDF file to a markdown file","u":"/1.0.0/creator-guide/knowledge/pdf","h":"#tools-to-convert-a-pdf-file-to-a-markdown-file","p":636},{"i":639,"t":"Tool #1: LlamaParse","u":"/1.0.0/creator-guide/knowledge/pdf","h":"#tool-1-llamaparse","p":636},{"i":641,"t":"Tool #2: GPTPDF","u":"/1.0.0/creator-guide/knowledge/pdf","h":"#tool-2-gptpdf","p":636},{"i":643,"t":"Create embeddings from the markdown files","u":"/1.0.0/creator-guide/knowledge/pdf","h":"#create-embeddings-from-the-markdown-files","p":636},{"i":647,"t":"help","u":"/1.0.0/node-guide/cli-options","h":"#help","p":645},{"i":649,"t":"version","u":"/1.0.0/node-guide/cli-options","h":"#version","p":645},{"i":651,"t":"init","u":"/1.0.0/node-guide/cli-options","h":"#init","p":645},{"i":653,"t":"start","u":"/1.0.0/node-guide/cli-options","h":"#start","p":645},{"i":655,"t":"stop","u":"/1.0.0/node-guide/cli-options","h":"#stop","p":645},{"i":657,"t":"config","u":"/1.0.0/node-guide/cli-options","h":"#config","p":645},{"i":659,"t":"base","u":"/1.0.0/node-guide/cli-options","h":"#base","p":645},{"i":663,"t":"Prerequisites","u":"/1.0.0/node-guide/quick-start","h":"#prerequisites","p":661},{"i":665,"t":"Installing the node","u":"/1.0.0/node-guide/quick-start","h":"#installing-the-node","p":661},{"i":667,"t":"Next steps","u":"/1.0.0/node-guide/quick-start","h":"#next-steps","p":661},{"i":671,"t":"Supported on","u":"/1.0.0/node-guide/system-requirements","h":"#supported-on","p":669},{"i":673,"t":"GPU","u":"/1.0.0/node-guide/system-requirements","h":"#gpu","p":669},{"i":675,"t":"CPU","u":"/1.0.0/node-guide/system-requirements","h":"#cpu","p":669},{"i":677,"t":"Oses","u":"/1.0.0/node-guide/system-requirements","h":"#oses","p":669},{"i":681,"t":"Bind your node","u":"/1.0.0/node-guide/register","h":"#bind-your-node","p":679},{"i":683,"t":"Protect your node ID and device ID","u":"/1.0.0/node-guide/register","h":"#protect-your-node-id-and-device-id","p":679},{"i":685,"t":"Join a Domain","u":"/1.0.0/node-guide/register","h":"#join-a-domain","p":679},{"i":687,"t":"Steps to Join a Domain from Your Node Management Page","u":"/1.0.0/node-guide/register","h":"#steps-to-join-a-domain-from-your-node-management-page","p":679},{"i":689,"t":"Steps to Join a Domain from the AI Agent Domains page","u":"/1.0.0/node-guide/register","h":"#steps-to-join-a-domain-from-the-ai-agent-domains-page","p":679},{"i":691,"t":"Important Notes","u":"/1.0.0/node-guide/register","h":"#important-notes","p":679},{"i":695,"t":"Pre-set configurations","u":"/1.0.0/node-guide/customize","h":"#pre-set-configurations","p":693},{"i":697,"t":"The config subcommand","u":"/1.0.0/node-guide/customize","h":"#the-config-subcommand","p":693},{"i":699,"t":"Select an LLM","u":"/1.0.0/node-guide/customize","h":"#select-an-llm","p":693},{"i":701,"t":"Select a knowledge base","u":"/1.0.0/node-guide/customize","h":"#select-a-knowledge-base","p":693},{"i":703,"t":"Customize prompts","u":"/1.0.0/node-guide/customize","h":"#customize-prompts","p":693},{"i":705,"t":"Next steps","u":"/1.0.0/node-guide/customize","h":"#next-steps","p":693},{"i":709,"t":"Next steps:","u":"/1.0.0/intro","h":"#next-steps","p":707},{"i":710,"t":"Users","u":"/1.0.0/intro","h":"#users","p":707},{"i":712,"t":"Node operators","u":"/1.0.0/intro","h":"#node-operators","p":707},{"i":714,"t":"Domain operators","u":"/1.0.0/intro","h":"#domain-operators","p":707},{"i":716,"t":"Creators","u":"/1.0.0/intro","h":"#creators","p":707},{"i":720,"t":"Running an Nvidia GPU-enabled AWS instance","u":"/1.0.0/node-guide/tasks/aws","h":"#running-an-nvidia-gpu-enabled-aws-instance","p":718},{"i":722,"t":"Running a CPU-only AWS instance","u":"/1.0.0/node-guide/tasks/aws","h":"#running-a-cpu-only-aws-instance","p":718},{"i":726,"t":"Quick start","u":"/1.0.0/node-guide/tasks/docker","h":"#quick-start","p":724},{"i":728,"t":"Stop and re-start","u":"/1.0.0/node-guide/tasks/docker","h":"#stop-and-re-start","p":724},{"i":730,"t":"Make changes to the node","u":"/1.0.0/node-guide/tasks/docker","h":"#make-changes-to-the-node","p":724},{"i":732,"t":"Change the node ID","u":"/1.0.0/node-guide/tasks/docker","h":"#change-the-node-id","p":724},{"i":734,"t":"Build a node image locally","u":"/1.0.0/node-guide/tasks/docker","h":"#build-a-node-image-locally","p":724},{"i":738,"t":"Install","u":"/1.0.0/node-guide/install_uninstall","h":"#install","p":736},{"i":740,"t":"Install the latest version of GaiaNet node","u":"/1.0.0/node-guide/install_uninstall","h":"#install-the-latest-version-of-gaianet-node","p":736},{"i":742,"t":"Install the specific version of GaiaNet Node","u":"/1.0.0/node-guide/install_uninstall","h":"#install-the-specific-version-of-gaianet-node","p":736},{"i":744,"t":"Update the current Gaianet node","u":"/1.0.0/node-guide/install_uninstall","h":"#update-the-current-gaianet-node","p":736},{"i":746,"t":"Uninstall","u":"/1.0.0/node-guide/install_uninstall","h":"#uninstall","p":736},{"i":748,"t":"What's installed","u":"/1.0.0/node-guide/install_uninstall","h":"#whats-installed","p":736},{"i":750,"t":"CLI options for the installer","u":"/1.0.0/node-guide/install_uninstall","h":"#cli-options-for-the-installer","p":736},{"i":754,"t":"Use Supervise","u":"/1.0.0/node-guide/tasks/protect","h":"#use-supervise","p":752},{"i":756,"t":"Reduce the nice value","u":"/1.0.0/node-guide/tasks/protect","h":"#reduce-the-nice-value","p":752},{"i":760,"t":"Ubuntu 22.04","u":"/1.0.0/node-guide/tasks/cuda","h":"#ubuntu-2204","p":758},{"i":761,"t":"1 Install the Nvidia driver.","u":"/1.0.0/node-guide/tasks/cuda","h":"#1-install-the-nvidia-driver","p":758},{"i":763,"t":"2 Install the CUDA toolkit.","u":"/1.0.0/node-guide/tasks/cuda","h":"#2-install-the-cuda-toolkit","p":758},{"i":765,"t":"More resources","u":"/1.0.0/node-guide/tasks/cuda","h":"#more-resources","p":758},{"i":768,"t":"The system cannot find CUDA libraries","u":"/1.0.0/node-guide/troubleshooting","h":"#the-system-cannot-find-cuda-libraries","p":767},{"i":770,"t":"Failed to recover from collection snapshot on Windows WSL","u":"/1.0.0/node-guide/troubleshooting","h":"#failed-to-recover-from-collection-snapshot-on-windows-wsl","p":767},{"i":772,"t":"Failed to start the node with an error message Port 8080 is in use. Exit ...","u":"/1.0.0/node-guide/troubleshooting","h":"#failed-to-start-the-node-with-an-error-message-port-8080-is-in-use-exit-","p":767},{"i":774,"t":"Load library failed: libgomp.so.1: cannot open shared object file: No such file or directory","u":"/1.0.0/node-guide/troubleshooting","h":"#load-library-failed-libgompso1-cannot-open-shared-object-file-no-such-file-or-directory","p":767},{"i":776,"t":"Failed to remove the default collection","u":"/1.0.0/node-guide/troubleshooting","h":"#failed-to-remove-the-default-collection","p":767},{"i":778,"t":"File I/O error","u":"/1.0.0/node-guide/troubleshooting","h":"#file-io-error","p":767},{"i":780,"t":"The \"Failed to open the file\" Error","u":"/1.0.0/node-guide/troubleshooting","h":"#the-failed-to-open-the-file-error","p":767},{"i":782,"t":"The \"Too many open files\" Error on macOS","u":"/1.0.0/node-guide/troubleshooting","h":"#the-too-many-open-files-error-on-macos","p":767},{"i":784,"t":"Permission denied when use the installer script to install WasmEdge","u":"/1.0.0/node-guide/troubleshooting","h":"#permission-denied-when-use-the-installer-script-to-install-wasmedge","p":767},{"i":788,"t":"Quickstart","u":"/1.0.0/tutorial/coinbase","h":"#quickstart","p":786},{"i":790,"t":"A Telegram bot for AgentKit","u":"/1.0.0/tutorial/coinbase","h":"#a-telegram-bot-for-agentkit","p":786},{"i":798,"t":"Introduction to the LLM Translation Agent","u":"/1.0.0/tutorial/translator-agent","h":"#introduction-to-the-llm-translation-agent","p":796},{"i":800,"t":"Demo 1: Running Translation Agents with Llama-3-8B","u":"/1.0.0/tutorial/translator-agent","h":"#demo-1-running-translation-agents-with-llama-3-8b","p":796},{"i":802,"t":"Step 1.1: Run a Llama-3-8B GaiaNet node","u":"/1.0.0/tutorial/translator-agent","h":"#step-11-run-a-llama-3-8b-gaianet-node","p":796},{"i":804,"t":"Step 1.2 Run the Translation Agent on top of Llama-3-8B","u":"/1.0.0/tutorial/translator-agent","h":"#step-12-run-the-translation-agent-on-top-of-llama-3-8b","p":796},{"i":806,"t":"Demo 2: Running Translation Agents with gemma-2-27b","u":"/1.0.0/tutorial/translator-agent","h":"#demo-2-running-translation-agents-with-gemma-2-27b","p":796},{"i":808,"t":"Step 2.1 Run a gemma-2-27b GaiaNet node","u":"/1.0.0/tutorial/translator-agent","h":"#step-21-run-a-gemma-2-27b-gaianet-node","p":796},{"i":810,"t":"Step 2.2 Run the Translation Agent to run on top of gemma-2-27b","u":"/1.0.0/tutorial/translator-agent","h":"#step-22-run-the-translation-agent-to-run-on-top-of-gemma-2-27b","p":796},{"i":812,"t":"Demo 3: Running Translation Agents with Phi-3-Medium long context model","u":"/1.0.0/tutorial/translator-agent","h":"#demo-3-running-translation-agents-with-phi-3-medium-long-context-model","p":796},{"i":814,"t":"Step 3.1: Run a Phi-3-medium-128k GaiaNet node","u":"/1.0.0/tutorial/translator-agent","h":"#step-31-run-a-phi-3-medium-128k-gaianet-node","p":796},{"i":816,"t":"Step 3.2 Clone and run the Translation Agent on top of Phi-3-medium-128k","u":"/1.0.0/tutorial/translator-agent","h":"#step-32-clone-and-run-the-translation-agent-on-top-of-phi-3-medium-128k","p":796},{"i":818,"t":"Evaluation of Translation Quality","u":"/1.0.0/tutorial/translator-agent","h":"#evaluation-of-translation-quality","p":796},{"i":820,"t":"Conclusion","u":"/1.0.0/tutorial/translator-agent","h":"#conclusion","p":796},{"i":824,"t":"Build a Trump agent with eliza and Gaia","u":"/1.0.0/tutorial/eliza","h":"#build-a-trump-agent-with-eliza-and-gaia","p":822},{"i":826,"t":"Advanced use case","u":"/1.0.0/tutorial/eliza","h":"#advanced-use-case","p":822},{"i":830,"t":"Prerequisites","u":"/1.0.0/user-guide/apps/codegpt","h":"#prerequisites","p":828},{"i":832,"t":"Install CodeGPT","u":"/1.0.0/user-guide/apps/codegpt","h":"#install-codegpt","p":828},{"i":834,"t":"Configure CodeGPT","u":"/1.0.0/user-guide/apps/codegpt","h":"#configure-codegpt","p":828},{"i":836,"t":"Use the plugin","u":"/1.0.0/user-guide/apps/codegpt","h":"#use-the-plugin","p":828},{"i":840,"t":"Prerequisites","u":"/1.0.0/user-guide/apps/agent-zero","h":"#prerequisites","p":838},{"i":842,"t":"Configure the agent","u":"/1.0.0/user-guide/apps/agent-zero","h":"#configure-the-agent","p":838},{"i":844,"t":"Run the agent","u":"/1.0.0/user-guide/apps/agent-zero","h":"#run-the-agent","p":838},{"i":846,"t":"Example 1","u":"/1.0.0/user-guide/apps/agent-zero","h":"#example-1","p":838},{"i":848,"t":"Example 2","u":"/1.0.0/user-guide/apps/agent-zero","h":"#example-2","p":838},{"i":850,"t":"Example 3","u":"/1.0.0/user-guide/apps/agent-zero","h":"#example-3","p":838},{"i":852,"t":"Example 4","u":"/1.0.0/user-guide/apps/agent-zero","h":"#example-4","p":838},{"i":854,"t":"Example 5","u":"/1.0.0/user-guide/apps/agent-zero","h":"#example-5","p":838},{"i":858,"t":"Steps","u":"/1.0.0/user-guide/apps/anything_llm","h":"#steps","p":856},{"i":862,"t":"Prerequisites","u":"/1.0.0/creator-guide/knowledge/text","h":"#prerequisites","p":860},{"i":864,"t":"Start a vector database","u":"/1.0.0/creator-guide/knowledge/text","h":"#start-a-vector-database","p":860},{"i":866,"t":"Create the vector collection snapshot","u":"/1.0.0/creator-guide/knowledge/text","h":"#create-the-vector-collection-snapshot","p":860},{"i":868,"t":"Options","u":"/1.0.0/creator-guide/knowledge/text","h":"#options","p":860},{"i":870,"t":"Create a vector snapshot","u":"/1.0.0/creator-guide/knowledge/text","h":"#create-a-vector-snapshot","p":860},{"i":872,"t":"Next steps","u":"/1.0.0/creator-guide/knowledge/text","h":"#next-steps","p":860},{"i":876,"t":"Prerequisites","u":"/1.0.0/tutorial/tool-call","h":"#prerequisites","p":874},{"i":878,"t":"Run the demo agent","u":"/1.0.0/tutorial/tool-call","h":"#run-the-demo-agent","p":874},{"i":880,"t":"Use the agent","u":"/1.0.0/tutorial/tool-call","h":"#use-the-agent","p":874},{"i":882,"t":"Make it robust","u":"/1.0.0/tutorial/tool-call","h":"#make-it-robust","p":874},{"i":886,"t":"Prerequisites","u":"/1.0.0/user-guide/apps/continue","h":"#prerequisites","p":884},{"i":888,"t":"Install Continue","u":"/1.0.0/user-guide/apps/continue","h":"#install-continue","p":884},{"i":890,"t":"Configure Continue","u":"/1.0.0/user-guide/apps/continue","h":"#configure-continue","p":884},{"i":892,"t":"Use the plugin","u":"/1.0.0/user-guide/apps/continue","h":"#use-the-plugin","p":884},{"i":896,"t":"Steps","u":"/1.0.0/user-guide/apps/dify","h":"#steps","p":894},{"i":900,"t":"Prerequisites","u":"/1.0.0/user-guide/apps/flowiseai","h":"#prerequisites","p":898},{"i":902,"t":"Start a FlowiseAI server","u":"/1.0.0/user-guide/apps/flowiseai","h":"#start-a-flowiseai-server","p":898},{"i":904,"t":"Build a documents QnA chatbot","u":"/1.0.0/user-guide/apps/flowiseai","h":"#build-a-documents-qna-chatbot","p":898},{"i":906,"t":"Get the Flowise Docs QnA template","u":"/1.0.0/user-guide/apps/flowiseai","h":"#get-the-flowise-docs-qna-template","p":898},{"i":908,"t":"Connect the chat model API","u":"/1.0.0/user-guide/apps/flowiseai","h":"#connect-the-chat-model-api","p":898},{"i":910,"t":"Connect the embedding model API","u":"/1.0.0/user-guide/apps/flowiseai","h":"#connect-the-embedding-model-api","p":898},{"i":912,"t":"Set up your documents","u":"/1.0.0/user-guide/apps/flowiseai","h":"#set-up-your-documents","p":898},{"i":914,"t":"Give it a try","u":"/1.0.0/user-guide/apps/flowiseai","h":"#give-it-a-try","p":898},{"i":916,"t":"More examples","u":"/1.0.0/user-guide/apps/flowiseai","h":"#more-examples","p":898},{"i":920,"t":"Prerequisites","u":"/1.0.0/user-guide/apps/gpt-planner","h":"#prerequisites","p":918},{"i":922,"t":"Run the agent","u":"/1.0.0/user-guide/apps/gpt-planner","h":"#run-the-agent","p":918},{"i":926,"t":"Prerequisites","u":"/1.0.0/user-guide/apps/flowiseai-tool-call","h":"#prerequisites","p":924},{"i":928,"t":"Start a FlowiseAI server","u":"/1.0.0/user-guide/apps/flowiseai-tool-call","h":"#start-a-flowiseai-server","p":924},{"i":930,"t":"Build a chatbot for realtime IP lookup","u":"/1.0.0/user-guide/apps/flowiseai-tool-call","h":"#build-a-chatbot-for-realtime-ip-lookup","p":924},{"i":932,"t":"Give it a try","u":"/1.0.0/user-guide/apps/flowiseai-tool-call","h":"#give-it-a-try","p":924},{"i":936,"t":"Steps","u":"/1.0.0/user-guide/apps/llamaedgebook","h":"#steps","p":934},{"i":940,"t":"The OpenAI Python library","u":"/1.0.0/user-guide/apps/intro","h":"#the-openai-python-library","p":938},{"i":942,"t":"The OpenAI Node API library","u":"/1.0.0/user-guide/apps/intro","h":"#the-openai-node-api-library","p":938},{"i":946,"t":"Prerequisites","u":"/1.0.0/user-guide/apps/cursor","h":"#prerequisites","p":944},{"i":948,"t":"Configure Cursor","u":"/1.0.0/user-guide/apps/cursor","h":"#configure-cursor","p":944},{"i":950,"t":"Use Cursor","u":"/1.0.0/user-guide/apps/cursor","h":"#use-cursor","p":944},{"i":953,"t":"Introduction","u":"/1.0.0/user-guide/api-reference","h":"#introduction","p":952},{"i":955,"t":"Endpoints","u":"/1.0.0/user-guide/api-reference","h":"#endpoints","p":952},{"i":956,"t":"Chat","u":"/1.0.0/user-guide/api-reference","h":"#chat","p":952},{"i":958,"t":"Embedding","u":"/1.0.0/user-guide/api-reference","h":"#embedding","p":952},{"i":960,"t":"Retrieve","u":"/1.0.0/user-guide/api-reference","h":"#retrieve","p":952},{"i":962,"t":"Get the model","u":"/1.0.0/user-guide/api-reference","h":"#get-the-model","p":952},{"i":964,"t":"Get the node info","u":"/1.0.0/user-guide/api-reference","h":"#get-the-node-info","p":952},{"i":966,"t":"Status Codes","u":"/1.0.0/user-guide/api-reference","h":"#status-codes","p":952},{"i":970,"t":"Prerequisites","u":"/1.0.0/user-guide/apps/llamacoder","h":"#prerequisites","p":968},{"i":972,"t":"Run the agent","u":"/1.0.0/user-guide/apps/llamacoder","h":"#run-the-agent","p":968},{"i":976,"t":"Prerequisites","u":"/1.0.0/user-guide/apps/llamatutor","h":"#prerequisites","p":974},{"i":978,"t":"Run the agent","u":"/1.0.0/user-guide/apps/llamatutor","h":"#run-the-agent","p":974},{"i":982,"t":"Prerequisites","u":"/1.0.0/user-guide/apps/llamaparse","h":"#prerequisites","p":980},{"i":984,"t":"Steps","u":"/1.0.0/user-guide/apps/llamaparse","h":"#steps","p":980},{"i":988,"t":"Prerequisites","u":"/1.0.0/user-guide/apps/openwebui","h":"#prerequisites","p":986},{"i":990,"t":"Start the Open WebUI on your machine","u":"/1.0.0/user-guide/apps/openwebui","h":"#start-the-open-webui-on-your-machine","p":986},{"i":992,"t":"Use Open WebUI as a Chatbot UI","u":"/1.0.0/user-guide/apps/openwebui","h":"#use-open-webui-as-a-chatbot-ui","p":986},{"i":994,"t":"Use Open WebUI as a client-side RAG tool","u":"/1.0.0/user-guide/apps/openwebui","h":"#use-open-webui-as-a-client-side-rag-tool","p":986},{"i":998,"t":"Steps","u":"/1.0.0/user-guide/apps/lobechat","h":"#steps","p":996},{"i":1002,"t":"Prerequisites","u":"/1.0.0/user-guide/apps/stockbot","h":"#prerequisites","p":1000},{"i":1004,"t":"Run the agent","u":"/1.0.0/user-guide/apps/stockbot","h":"#run-the-agent","p":1000},{"i":1008,"t":"Public Gaia domains","u":"/1.0.0/user-guide/nodes","h":"#public-gaia-domains","p":1006},{"i":1009,"t":"LLM: Llama 8b","u":"/1.0.0/user-guide/nodes","h":"#llm-llama-8b","p":1006},{"i":1011,"t":"Voice-to-text: Whisper v2 large","u":"/1.0.0/user-guide/nodes","h":"#voice-to-text-whisper-v2-large","p":1006},{"i":1013,"t":"Text-to-image: Realistic vision","u":"/1.0.0/user-guide/nodes","h":"#text-to-image-realistic-vision","p":1006},{"i":1015,"t":"Text-to-voice: GPT-SoVITS","u":"/1.0.0/user-guide/nodes","h":"#text-to-voice-gpt-sovits","p":1006},{"i":1017,"t":"Coding assistant agents","u":"/1.0.0/user-guide/nodes","h":"#coding-assistant-agents","p":1006},{"i":1018,"t":"Coder","u":"/1.0.0/user-guide/nodes","h":"#coder","p":1006},{"i":1020,"t":"Rust Coder","u":"/1.0.0/user-guide/nodes","h":"#rust-coder","p":1006},{"i":1022,"t":"Alternative LLM domains","u":"/1.0.0/user-guide/nodes","h":"#alternative-llm-domains","p":1006},{"i":1023,"t":"Llama 3b","u":"/1.0.0/user-guide/nodes","h":"#llama-3b","p":1006},{"i":1025,"t":"Qwen 7b","u":"/1.0.0/user-guide/nodes","h":"#qwen-7b","p":1006},{"i":1027,"t":"Qwen 72b","u":"/1.0.0/user-guide/nodes","h":"#qwen-72b","p":1006},{"i":1031,"t":"Web-based chatbot","u":"/1.0.0/user-guide/mynode","h":"#web-based-chatbot","p":1029},{"i":1033,"t":"OpenAI API replacement","u":"/1.0.0/user-guide/mynode","h":"#openai-api-replacement","p":1029},{"i":1037,"t":"Prepare the environment","u":"/1.0.0/user-guide/apps/translation-agent","h":"#prepare-the-environment","p":1035},{"i":1039,"t":"Prepare your translation task","u":"/1.0.0/user-guide/apps/translation-agent","h":"#prepare-your-translation-task","p":1035},{"i":1041,"t":"Translate","u":"/1.0.0/user-guide/apps/translation-agent","h":"#translate","p":1035},{"i":1045,"t":"Prerequisites","u":"/1.0.0/user-guide/apps/obsidian","h":"#prerequisites","p":1043},{"i":1047,"t":"Obsidian-local-gpt Plugin Setup","u":"/1.0.0/user-guide/apps/obsidian","h":"#obsidian-local-gpt-plugin-setup","p":1043},{"i":1049,"t":"Install the Obsidian-local-gpt Plugin","u":"/1.0.0/user-guide/apps/obsidian","h":"#install-the-obsidian-local-gpt-plugin","p":1043},{"i":1051,"t":"Configure the Plugin","u":"/1.0.0/user-guide/apps/obsidian","h":"#configure-the-plugin","p":1043},{"i":1053,"t":"Configure Obsidian Hotkey","u":"/1.0.0/user-guide/apps/obsidian","h":"#configure-obsidian-hotkey","p":1043},{"i":1055,"t":"Use Cases","u":"/1.0.0/user-guide/apps/obsidian","h":"#use-cases","p":1043},{"i":1056,"t":"Text Continuation","u":"/1.0.0/user-guide/apps/obsidian","h":"#text-continuation","p":1043},{"i":1058,"t":"Summarization","u":"/1.0.0/user-guide/apps/obsidian","h":"#summarization","p":1043},{"i":1060,"t":"Spelling and Grammar Check","u":"/1.0.0/user-guide/apps/obsidian","h":"#spelling-and-grammar-check","p":1043},{"i":1062,"t":"Extract Action Items","u":"/1.0.0/user-guide/apps/obsidian","h":"#extract-action-items","p":1043},{"i":1064,"t":"General Assistance","u":"/1.0.0/user-guide/apps/obsidian","h":"#general-assistance","p":1043},{"i":1066,"t":"Try it now!","u":"/1.0.0/user-guide/apps/obsidian","h":"#try-it-now","p":1043},{"i":1070,"t":"Prerequisites","u":"/1.0.0/user-guide/apps/zed","h":"#prerequisites","p":1068},{"i":1072,"t":"Configure Zed","u":"/1.0.0/user-guide/apps/zed","h":"#configure-zed","p":1068},{"i":1074,"t":"Use Zed","u":"/1.0.0/user-guide/apps/zed","h":"","p":1068},{"i":1078,"t":"Segment your text file","u":"/1.0.0/creator-guide/knowledge/web-tool","h":"#segment-your-text-file","p":1076},{"i":1080,"t":"Generate the snapshot file","u":"/1.0.0/creator-guide/knowledge/web-tool","h":"#generate-the-snapshot-file","p":1076},{"i":1082,"t":"Update the node config","u":"/1.0.0/creator-guide/knowledge/web-tool","h":"#update-the-node-config","p":1076}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/557",[0,2.563,1,3.111,2,3.111,3,3.467,4,2.447,5,3.467]],["t/559",[6,4.45,7,4.22]],["t/561",[1,3.111,2,3.111,8,2.113,9,3.111,10,3.467,11,2.877]],["t/563",[12,6.808]],["t/565",[13,6.808]],["t/569",[14,3.304]],["t/571",[15,2.995,16,3.094,17,4.078]],["t/573",[8,2.629,16,2.716,18,3.189,19,2.812]],["t/575",[20,5.307]],["t/577",[8,2.995,16,3.094,19,3.203]],["t/579",[21,4.028,22,2.713]],["t/583",[8,2.629,23,4.314,24,3.58,25,3.044]],["t/585",[24,2.877,26,3.467,27,2.877,28,3.111,29,3.467,30,2.563]],["t/587",[9,5.123,31,5.708]],["t/589",[25,3.468,32,4.41,33,4.914]],["t/591",[27,4.078,28,4.41,34,4.914]],["t/597",[14,3.304]],["t/599",[15,2.995,16,3.094,17,4.078]],["t/601",[8,2.629,16,2.716,18,3.189,19,2.812]],["t/603",[20,5.307]],["t/605",[8,2.995,16,3.094,19,3.203]],["t/607",[21,4.028,22,2.713]],["t/611",[22,2.05,35,4.314,36,3.58,37,2.92]],["t/615",[38,3.844,39,3.844,40,3.844,41,2.997,42,2.343]],["t/617",[8,2.629,25,3.044,41,3.363,42,2.629]],["t/620",[43,6.808]],["t/622",[44,5.651]],["t/624",[45,3.327,46,4.914,47,4.914]],["t/626",[48,3.594,49,2.77]],["t/628",[48,3.594,50,5.708]],["t/630",[48,3.594,51,5.708]],["t/632",[52,4.314,53,4.314,54,3.871,55,4.314]],["t/634",[56,6.11]],["t/638",[41,2.702,42,3.211,57,2.702,58,3.467,59,3.467]],["t/639",[57,3.83,60,3.094,61,4.914]],["t/641",[57,3.83,62,3.203,63,4.914]],["t/643",[8,2.629,25,3.044,41,3.363,42,2.629]],["t/647",[64,6.808]],["t/649",[65,5.651]],["t/651",[66,6.808]],["t/653",[15,4.15]],["t/655",[67,6.11]],["t/657",[68,5.651]],["t/659",[6,5.307]],["t/663",[14,3.304]],["t/665",[49,2.77,69,3.279]],["t/667",[21,4.028,22,2.713]],["t/671",[70,6.808]],["t/673",[71,6.11]],["t/675",[72,6.11]],["t/677",[73,6.808]],["t/681",[49,2.77,74,5.708]],["t/683",[49,1.866,75,3.844,76,5.109,77,3.844]],["t/685",[37,3.864,78,4.737]],["t/687",[22,1.648,37,2.347,49,1.682,78,2.877,79,3.467,80,3.111]],["t/689",[22,1.5,37,3.319,54,2.833,78,2.62,80,2.833,81,1.565]],["t/691",[82,5.708,83,5.708]],["t/695",[11,4.078,84,4.914,85,3.203]],["t/697",[68,4.737,86,5.708]],["t/699",[30,4.22,87,5.123]],["t/701",[6,3.83,24,4.078,87,4.41]],["t/703",[88,5.708,89,5.708]],["t/705",[21,4.028,22,2.713]],["t/709",[21,4.028,22,2.713]],["t/710",[27,5.651]],["t/712",[49,2.77,90,5.123]],["t/714",[37,3.864,90,5.123]],["t/716",[91,6.808]],["t/720",[71,3.111,92,1.758,93,3.111,94,3.467,95,3.111,96,3.111]],["t/722",[72,3.871,92,2.187,95,3.871,96,3.871]],["t/726",[15,3.479,97,5.708]],["t/728",[15,2.995,67,4.41,98,4.914]],["t/730",[49,2.385,99,4.41,100,4.41]],["t/732",[49,2.385,76,4.41,100,4.41]],["t/734",[0,3.189,49,2.093,101,3.871,102,3.58]],["t/738",[69,3.912]],["t/740",[48,2.42,49,1.866,65,3.19,69,2.209,103,3.844]],["t/742",[48,2.42,49,1.866,65,3.19,69,2.209,104,3.844]],["t/744",[48,2.716,49,2.093,105,3.871,106,4.314]],["t/746",[107,6.808]],["t/748",[69,3.279,108,5.708]],["t/750",[20,3.83,69,2.823,109,4.914]],["t/754",[110,3.279,111,5.708]],["t/756",[112,4.914,113,4.914,114,4.914]],["t/760",[115,4.914,116,4.914,117,4.914]],["t/761",[60,2.716,69,2.478,93,3.871,118,4.314]],["t/763",[62,2.812,69,2.478,119,3.871,120,4.314]],["t/765",[121,5.123,122,5.708]],["t/768",[119,3.871,123,4.314,124,4.314,125,3.363]],["t/770",[18,2.563,19,2.26,126,2.563,127,3.467,128,3.467,129,3.467]],["t/772",[15,1.632,49,1.3,110,1.539,126,1.98,130,2.088,131,2.678,132,2.678,133,2.678,134,2.678]],["t/774",[42,2.218,45,1.477,60,1.374,125,1.701,126,1.613,135,2.182,136,2.182,137,2.182,138,2.182,139,2.182,140,2.182]],["t/776",[18,3.189,126,3.189,141,4.314,142,4.314]],["t/778",[42,2.995,130,3.83,143,4.914]],["t/780",[42,2.629,45,2.92,126,3.189,130,3.363]],["t/782",[42,2.343,45,2.603,130,2.997,144,3.844,145,3.844]],["t/784",[69,2.817,110,1.814,146,3.157,147,3.157,148,3.157,149,3.157]],["t/788",[150,6.808]],["t/790",[151,4.914,152,4.914,153,4.914]],["t/798",[30,3.189,44,3.58,81,2.139,154,2.629]],["t/800",[4,2.045,60,1.825,81,1.437,92,1.469,154,1.766,155,2.259,156,1.962,157,2.259]],["t/802",[4,1.89,22,1.273,48,1.686,49,1.3,60,2.71,92,1.358,156,1.813,157,2.088]],["t/804",[4,1.757,22,1.183,60,1.567,62,1.623,81,1.234,92,1.262,154,1.517,156,1.685,157,1.941,158,2.066]],["t/806",[62,2.989,81,1.437,92,1.469,154,1.766,155,2.259,159,2.405,160,2.405]],["t/808",[22,1.273,48,1.686,49,1.3,60,1.686,62,2.806,92,1.358,159,2.223,160,2.223]],["t/810",[22,1.105,62,3.193,81,1.153,92,1.945,154,1.417,158,1.93,159,1.93,160,1.93]],["t/812",[7,1.719,81,1.153,92,1.179,154,1.417,155,1.813,156,2.598,161,1.93,162,1.93,163,2.325,164,2.325]],["t/814",[22,1.183,48,1.567,49,1.208,60,1.567,92,1.262,156,2.747,161,2.066,162,2.066,165,2.234]],["t/816",[22,1.037,62,1.422,81,1.082,92,1.106,154,1.33,156,2.464,158,1.811,161,1.811,162,1.811,165,1.958,166,2.182]],["t/818",[154,2.995,167,4.914,168,4.914]],["t/820",[56,6.11]],["t/824",[0,2.842,36,3.19,81,1.906,169,3.844,170,3.844]],["t/826",[110,2.823,171,4.914,172,4.41]],["t/830",[14,3.304]],["t/832",[69,3.279,173,5.123]],["t/834",[85,3.721,173,5.123]],["t/836",[110,3.279,174,4.22]],["t/840",[14,3.304]],["t/842",[81,2.83,85,3.721]],["t/844",[81,2.83,92,2.894]],["t/846",[60,3.594,175,4.028]],["t/848",[62,3.721,175,4.028]],["t/850",[156,3.864,175,4.028]],["t/852",[175,4.028,176,5.708]],["t/854",[175,4.028,177,5.708]],["t/858",[22,3.236]],["t/862",[14,3.304]],["t/864",[15,2.995,16,3.094,17,4.078]],["t/866",[8,2.629,16,2.716,18,3.189,19,2.812]],["t/868",[20,5.307]],["t/870",[8,2.995,16,3.094,19,3.203]],["t/872",[21,4.028,22,2.713]],["t/876",[14,3.304]],["t/878",[81,2.437,92,2.491,155,3.83]],["t/880",[81,2.83,110,3.279]],["t/882",[99,5.123,178,5.708]],["t/886",[14,3.304]],["t/888",[69,3.279,179,4.737]],["t/890",[85,3.721,179,4.737]],["t/892",[110,3.279,174,4.22]],["t/896",[22,3.236]],["t/900",[14,3.304]],["t/902",[15,2.995,180,4.41,181,4.41]],["t/904",[0,3.189,182,3.871,183,3.871,184,3.363]],["t/906",[183,3.871,185,4.314,186,4.314,187,4.314]],["t/908",[7,3.189,188,3.871,189,3.871,190,3.363]],["t/910",[7,3.189,25,3.044,188,3.871,190,3.363]],["t/912",[11,4.078,182,4.41,191,4.914]],["t/914",[192,5.123,193,4.737]],["t/916",[121,5.123,175,4.028]],["t/920",[14,3.304]],["t/922",[81,2.83,92,2.894]],["t/926",[14,3.304]],["t/928",[15,2.995,180,4.41,181,4.41]],["t/930",[0,2.842,184,2.997,194,3.844,195,3.844,196,3.844]],["t/932",[192,5.123,193,4.737]],["t/936",[22,3.236]],["t/940",[125,3.83,197,4.078,198,4.914]],["t/942",[49,2.093,125,3.363,190,3.363,197,3.58]],["t/946",[14,3.304]],["t/948",[85,3.721,199,5.123]],["t/950",[110,3.279,199,5.123]],["t/953",[44,5.651]],["t/955",[200,6.808]],["t/956",[189,6.11]],["t/958",[25,4.805]],["t/960",[32,6.11]],["t/962",[7,5.033]],["t/964",[49,2.77,201,5.708]],["t/966",[202,5.708,203,5.123]],["t/970",[14,3.304]],["t/972",[81,2.83,92,2.894]],["t/976",[14,3.304]],["t/978",[81,2.83,92,2.894]],["t/982",[14,3.304]],["t/984",[22,3.236]],["t/988",[14,3.304]],["t/990",[15,2.629,45,2.92,204,3.58,205,4.314]],["t/992",[45,2.603,110,2.209,184,2.997,204,3.19,206,3.844]],["t/994",[45,2.137,57,2.461,110,1.814,204,2.62,207,3.157,208,3.157,209,3.157]],["t/998",[22,3.236]],["t/1002",[14,3.304]],["t/1004",[81,2.83,92,2.894]],["t/1008",[36,4.078,37,3.327,210,4.914]],["t/1009",[4,3.468,30,3.633,157,3.83]],["t/1011",[211,3.45,212,2.842,213,3.844,214,3.844,215,3.844]],["t/1013",[101,3.871,212,3.189,216,4.314,217,4.314]],["t/1015",[211,3.871,212,3.189,218,3.58,219,4.314]],["t/1017",[81,2.437,203,4.41,220,4.41]],["t/1018",[221,6.11]],["t/1020",[221,5.123,222,5.708]],["t/1022",[30,3.633,37,3.327,223,4.914]],["t/1023",[4,4.028,224,5.708]],["t/1025",[225,5.123,226,5.708]],["t/1027",[225,5.123,227,5.708]],["t/1031",[6,3.83,184,3.83,228,4.914]],["t/1033",[190,3.83,197,4.078,229,4.914]],["t/1037",[230,5.123,231,5.708]],["t/1039",[154,2.995,230,4.41,232,4.914]],["t/1041",[154,4.15]],["t/1045",[14,3.304]],["t/1047",[102,3.19,174,2.842,218,3.19,233,3.19,234,3.844]],["t/1049",[69,2.209,102,3.19,174,2.842,218,3.19,233,3.19]],["t/1051",[85,3.721,174,4.22]],["t/1053",[85,3.203,233,4.078,235,4.914]],["t/1055",[110,3.279,172,5.123]],["t/1056",[179,4.737,212,4.22]],["t/1058",[236,6.808]],["t/1060",[237,4.914,238,4.914,239,4.914]],["t/1062",[240,4.914,241,4.914,242,4.914]],["t/1064",[220,5.123,243,5.123]],["t/1066",[193,4.737,244,5.708]],["t/1070",[14,3.304]],["t/1072",[85,3.721,245,5.123]],["t/1074",[110,3.279,245,5.123]],["t/1078",[42,2.995,212,3.633,246,4.914]],["t/1080",[19,3.203,42,2.995,243,4.41]],["t/1082",[49,2.385,68,4.078,105,4.41]]],"invertedIndex":[["04",{"_index":117,"t":{"760":{"position":[[10,2]]}}}],["1",{"_index":60,"t":{"639":{"position":[[6,1]]},"761":{"position":[[0,1]]},"774":{"position":[[32,1]]},"800":{"position":[[5,1]]},"802":{"position":[[5,1],[7,1]]},"804":{"position":[[5,1]]},"808":{"position":[[7,1]]},"814":{"position":[[7,1]]},"846":{"position":[[8,1]]}}}],["128k",{"_index":165,"t":{"814":{"position":[[29,4]]},"816":{"position":[[68,4]]}}}],["2",{"_index":62,"t":{"641":{"position":[[6,1]]},"763":{"position":[[0,1]]},"804":{"position":[[7,1]]},"806":{"position":[[5,1],[46,1]]},"808":{"position":[[5,1],[21,1]]},"810":{"position":[[5,1],[7,1],[58,1]]},"816":{"position":[[7,1]]},"848":{"position":[[8,1]]}}}],["22",{"_index":116,"t":{"760":{"position":[[7,2]]}}}],["27b",{"_index":160,"t":{"806":{"position":[[48,3]]},"808":{"position":[[23,3]]},"810":{"position":[[60,3]]}}}],["3",{"_index":156,"t":{"800":{"position":[[46,1]]},"802":{"position":[[22,1]]},"804":{"position":[[51,1]]},"812":{"position":[[5,1],[44,1]]},"814":{"position":[[5,1],[20,1]]},"816":{"position":[[5,1],[59,1]]},"850":{"position":[[8,1]]}}}],["3b",{"_index":224,"t":{"1023":{"position":[[6,2]]}}}],["4",{"_index":176,"t":{"852":{"position":[[8,1]]}}}],["5",{"_index":177,"t":{"854":{"position":[[8,1]]}}}],["72b",{"_index":227,"t":{"1027":{"position":[[5,3]]}}}],["7b",{"_index":226,"t":{"1025":{"position":[[5,2]]}}}],["8080",{"_index":133,"t":{"772":{"position":[[52,4]]}}}],["8b",{"_index":157,"t":{"800":{"position":[[48,2]]},"802":{"position":[[24,2]]},"804":{"position":[[53,2]]},"1009":{"position":[[11,2]]}}}],["abstract",{"_index":43,"t":{"620":{"position":[[0,8]]}}}],["action",{"_index":241,"t":{"1062":{"position":[[8,6]]}}}],["advanc",{"_index":171,"t":{"826":{"position":[[0,8]]}}}],["agent",{"_index":81,"t":{"689":{"position":[[35,5]]},"798":{"position":[[36,5]]},"800":{"position":[[28,6]]},"804":{"position":[[29,5]]},"806":{"position":[[28,6]]},"810":{"position":[[29,5]]},"812":{"position":[[28,6]]},"816":{"position":[[39,5]]},"824":{"position":[[14,5]]},"842":{"position":[[14,5]]},"844":{"position":[[8,5]]},"878":{"position":[[13,5]]},"880":{"position":[[8,5]]},"922":{"position":[[8,5]]},"972":{"position":[[8,5]]},"978":{"position":[[8,5]]},"1004":{"position":[[8,5]]},"1017":{"position":[[17,6]]}}}],["agentkit",{"_index":153,"t":{"790":{"position":[[19,8]]}}}],["ai",{"_index":54,"t":{"632":{"position":[[26,2]]},"689":{"position":[[32,2]]}}}],["altern",{"_index":223,"t":{"1022":{"position":[[0,11]]}}}],["answer",{"_index":10,"t":{"561":{"position":[[22,6]]}}}],["api",{"_index":190,"t":{"908":{"position":[[23,3]]},"910":{"position":[[28,3]]},"942":{"position":[[16,3]]},"1033":{"position":[[7,3]]}}}],["ask",{"_index":31,"t":{"587":{"position":[[0,3]]}}}],["asset",{"_index":55,"t":{"632":{"position":[[29,6]]}}}],["assist",{"_index":220,"t":{"1017":{"position":[[7,9]]},"1064":{"position":[[8,10]]}}}],["aw",{"_index":95,"t":{"720":{"position":[[30,3]]},"722":{"position":[[19,3]]}}}],["base",{"_index":6,"t":{"559":{"position":[[8,4]]},"659":{"position":[[0,4]]},"701":{"position":[[19,4]]},"1031":{"position":[[4,5]]}}}],["bind",{"_index":74,"t":{"681":{"position":[[0,4]]}}}],["bot",{"_index":152,"t":{"790":{"position":[[11,3]]}}}],["build",{"_index":0,"t":{"557":{"position":[[0,5]]},"734":{"position":[[0,5]]},"824":{"position":[[0,5]]},"904":{"position":[[0,5]]},"930":{"position":[[0,5]]}}}],["case",{"_index":172,"t":{"826":{"position":[[13,4]]},"1055":{"position":[[4,5]]}}}],["chang",{"_index":100,"t":{"730":{"position":[[5,7]]},"732":{"position":[[0,6]]}}}],["chat",{"_index":189,"t":{"908":{"position":[[12,4]]},"956":{"position":[[0,4]]}}}],["chatbot",{"_index":184,"t":{"904":{"position":[[22,7]]},"930":{"position":[[8,7]]},"992":{"position":[[20,7]]},"1031":{"position":[[10,7]]}}}],["check",{"_index":239,"t":{"1060":{"position":[[21,5]]}}}],["cli",{"_index":109,"t":{"750":{"position":[[0,3]]}}}],["client",{"_index":207,"t":{"994":{"position":[[20,6]]}}}],["clone",{"_index":166,"t":{"816":{"position":[[9,5]]}}}],["code",{"_index":203,"t":{"966":{"position":[[7,5]]},"1017":{"position":[[0,6]]}}}],["codegpt",{"_index":173,"t":{"832":{"position":[[8,7]]},"834":{"position":[[10,7]]}}}],["coder",{"_index":221,"t":{"1018":{"position":[[0,5]]},"1020":{"position":[[5,5]]}}}],["collect",{"_index":18,"t":{"573":{"position":[[18,10]]},"601":{"position":[[18,10]]},"770":{"position":[[23,10]]},"776":{"position":[[29,10]]},"866":{"position":[[18,10]]}}}],["compon",{"_index":52,"t":{"632":{"position":[[0,9]]}}}],["conclus",{"_index":56,"t":{"634":{"position":[[0,10]]},"820":{"position":[[0,10]]}}}],["config",{"_index":68,"t":{"657":{"position":[[0,6]]},"697":{"position":[[4,6]]},"1082":{"position":[[16,6]]}}}],["configur",{"_index":85,"t":{"695":{"position":[[8,14]]},"834":{"position":[[0,9]]},"842":{"position":[[0,9]]},"890":{"position":[[0,9]]},"948":{"position":[[0,9]]},"1051":{"position":[[0,9]]},"1053":{"position":[[0,9]]},"1072":{"position":[[0,9]]}}}],["connect",{"_index":188,"t":{"908":{"position":[[0,7]]},"910":{"position":[[0,7]]}}}],["content",{"_index":40,"t":{"615":{"position":[[14,7]]}}}],["context",{"_index":164,"t":{"812":{"position":[[58,7]]}}}],["continu",{"_index":179,"t":{"888":{"position":[[8,8]]},"890":{"position":[[10,8]]},"1056":{"position":[[5,12]]}}}],["convert",{"_index":58,"t":{"638":{"position":[[9,7]]}}}],["cpp",{"_index":5,"t":{"557":{"position":[[39,3]]}}}],["cpu",{"_index":72,"t":{"675":{"position":[[0,3]]},"722":{"position":[[10,3]]}}}],["creat",{"_index":8,"t":{"561":{"position":[[0,6]]},"573":{"position":[[0,6]]},"577":{"position":[[0,6]]},"583":{"position":[[13,8]]},"601":{"position":[[0,6]]},"605":{"position":[[0,6]]},"617":{"position":[[0,6]]},"643":{"position":[[0,6]]},"866":{"position":[[0,6]]},"870":{"position":[[0,6]]}}}],["creator",{"_index":91,"t":{"716":{"position":[[0,8]]}}}],["cuda",{"_index":119,"t":{"763":{"position":[[14,4]]},"768":{"position":[[23,4]]}}}],["current",{"_index":106,"t":{"744":{"position":[[11,7]]}}}],["cursor",{"_index":199,"t":{"948":{"position":[[10,6]]},"950":{"position":[[4,6]]}}}],["custom",{"_index":88,"t":{"703":{"position":[[0,9]]}}}],["databas",{"_index":17,"t":{"571":{"position":[[15,8]]},"599":{"position":[[15,8]]},"864":{"position":[[15,8]]}}}],["decentr",{"_index":47,"t":{"624":{"position":[[16,16]]}}}],["default",{"_index":142,"t":{"776":{"position":[[21,7]]}}}],["demo",{"_index":155,"t":{"800":{"position":[[0,4]]},"806":{"position":[[0,4]]},"812":{"position":[[0,4]]},"878":{"position":[[8,4]]}}}],["deni",{"_index":147,"t":{"784":{"position":[[11,6]]}}}],["devic",{"_index":77,"t":{"683":{"position":[[25,6]]}}}],["directori",{"_index":140,"t":{"774":{"position":[[83,9]]}}}],["doc",{"_index":186,"t":{"906":{"position":[[16,4]]}}}],["document",{"_index":182,"t":{"904":{"position":[[8,9]]},"912":{"position":[[12,9]]}}}],["domain",{"_index":37,"t":{"611":{"position":[[26,6]]},"685":{"position":[[7,6]]},"687":{"position":[[16,6]]},"689":{"position":[[16,6],[41,7]]},"714":{"position":[[0,6]]},"1008":{"position":[[12,7]]},"1022":{"position":[[16,7]]}}}],["driver",{"_index":118,"t":{"761":{"position":[[21,6]]}}}],["eliza",{"_index":170,"t":{"824":{"position":[[25,5]]}}}],["embed",{"_index":25,"t":{"583":{"position":[[32,10]]},"589":{"position":[[17,10]]},"617":{"position":[[7,10]]},"643":{"position":[[7,10]]},"910":{"position":[[12,9]]},"958":{"position":[[0,9]]}}}],["enabl",{"_index":94,"t":{"720":{"position":[[22,7]]}}}],["endpoint",{"_index":200,"t":{"955":{"position":[[0,9]]}}}],["environ",{"_index":231,"t":{"1037":{"position":[[12,11]]}}}],["error",{"_index":130,"t":{"772":{"position":[[33,5]]},"778":{"position":[[9,5]]},"780":{"position":[[30,5]]},"782":{"position":[[26,5]]}}}],["evalu",{"_index":167,"t":{"818":{"position":[[0,10]]}}}],["exampl",{"_index":175,"t":{"846":{"position":[[0,7]]},"848":{"position":[[0,7]]},"850":{"position":[[0,7]]},"852":{"position":[[0,7]]},"854":{"position":[[0,7]]},"916":{"position":[[5,8]]}}}],["exit",{"_index":134,"t":{"772":{"position":[[68,4]]}}}],["extract",{"_index":240,"t":{"1062":{"position":[[0,7]]}}}],["fail",{"_index":126,"t":{"770":{"position":[[0,6]]},"772":{"position":[[0,6]]},"774":{"position":[[13,6]]},"776":{"position":[[0,6]]},"780":{"position":[[5,6]]}}}],["file",{"_index":42,"t":{"615":{"position":[[36,4]]},"617":{"position":[[36,5]]},"638":{"position":[[23,4],[42,4]]},"643":{"position":[[36,5]]},"774":{"position":[[61,4],[75,4]]},"778":{"position":[[0,4]]},"780":{"position":[[24,4]]},"782":{"position":[[19,5]]},"1078":{"position":[[18,4]]},"1080":{"position":[[22,4]]}}}],["find",{"_index":124,"t":{"768":{"position":[[18,4]]}}}],["fine",{"_index":1,"t":{"557":{"position":[[10,4]]},"561":{"position":[[37,4]]}}}],["finetun",{"_index":12,"t":{"563":{"position":[[0,8]]}}}],["flowis",{"_index":185,"t":{"906":{"position":[[8,7]]}}}],["flowiseai",{"_index":180,"t":{"902":{"position":[[8,9]]},"928":{"position":[[8,9]]}}}],["gaia",{"_index":36,"t":{"611":{"position":[[21,4]]},"824":{"position":[[35,4]]},"1008":{"position":[[7,4]]}}}],["gaianet",{"_index":48,"t":{"626":{"position":[[0,7]]},"628":{"position":[[0,7]]},"630":{"position":[[0,7]]},"740":{"position":[[30,7]]},"742":{"position":[[32,7]]},"744":{"position":[[19,7]]},"802":{"position":[[27,7]]},"808":{"position":[[27,7]]},"814":{"position":[[34,7]]}}}],["gemma",{"_index":159,"t":{"806":{"position":[[40,5]]},"808":{"position":[[15,5]]},"810":{"position":[[52,5]]}}}],["gener",{"_index":243,"t":{"1064":{"position":[[0,7]]},"1080":{"position":[[0,8]]}}}],["give",{"_index":192,"t":{"914":{"position":[[0,4]]},"932":{"position":[[0,4]]}}}],["gpt",{"_index":218,"t":{"1015":{"position":[[15,3]]},"1047":{"position":[[15,3]]},"1049":{"position":[[27,3]]}}}],["gptpdf",{"_index":63,"t":{"641":{"position":[[9,6]]}}}],["gpu",{"_index":71,"t":{"673":{"position":[[0,3]]},"720":{"position":[[18,3]]}}}],["grammar",{"_index":238,"t":{"1060":{"position":[[13,7]]}}}],["help",{"_index":64,"t":{"647":{"position":[[0,4]]}}}],["hotkey",{"_index":235,"t":{"1053":{"position":[[19,6]]}}}],["id",{"_index":76,"t":{"683":{"position":[[18,2],[32,2]]},"732":{"position":[[16,2]]}}}],["imag",{"_index":101,"t":{"734":{"position":[[13,5]]},"1013":{"position":[[8,5]]}}}],["import",{"_index":82,"t":{"691":{"position":[[0,9]]}}}],["info",{"_index":201,"t":{"964":{"position":[[13,4]]}}}],["init",{"_index":66,"t":{"651":{"position":[[0,4]]}}}],["instal",{"_index":69,"t":{"665":{"position":[[0,10]]},"738":{"position":[[0,7]]},"740":{"position":[[0,7]]},"742":{"position":[[0,7]]},"748":{"position":[[7,9]]},"750":{"position":[[20,9]]},"761":{"position":[[2,7]]},"763":{"position":[[2,7]]},"784":{"position":[[31,9],[51,7]]},"832":{"position":[[0,7]]},"888":{"position":[[0,7]]},"1049":{"position":[[0,7]]}}}],["instanc",{"_index":96,"t":{"720":{"position":[[34,8]]},"722":{"position":[[23,8]]}}}],["introduct",{"_index":44,"t":{"622":{"position":[[0,12]]},"798":{"position":[[0,12]]},"953":{"position":[[0,12]]}}}],["ip",{"_index":195,"t":{"930":{"position":[[29,2]]}}}],["item",{"_index":242,"t":{"1062":{"position":[[15,5]]}}}],["join",{"_index":78,"t":{"685":{"position":[[0,4]]},"687":{"position":[[9,4]]},"689":{"position":[[9,4]]}}}],["knowledg",{"_index":24,"t":{"583":{"position":[[22,9]]},"585":{"position":[[31,9]]},"701":{"position":[[9,9]]}}}],["larg",{"_index":215,"t":{"1011":{"position":[[26,5]]}}}],["latest",{"_index":103,"t":{"740":{"position":[[12,6]]}}}],["launch",{"_index":35,"t":{"611":{"position":[[9,6]]}}}],["libgomp",{"_index":136,"t":{"774":{"position":[[21,7]]}}}],["librari",{"_index":125,"t":{"768":{"position":[[28,9]]},"774":{"position":[[5,7]]},"940":{"position":[[18,7]]},"942":{"position":[[20,7]]}}}],["lifecycl",{"_index":26,"t":{"585":{"position":[[0,9]]}}}],["llama",{"_index":4,"t":{"557":{"position":[[33,5]]},"800":{"position":[[40,5]]},"802":{"position":[[16,5]]},"804":{"position":[[45,5]]},"1009":{"position":[[5,5]]},"1023":{"position":[[0,5]]}}}],["llamapars",{"_index":61,"t":{"639":{"position":[[9,10]]}}}],["llm",{"_index":30,"t":{"585":{"position":[[54,3]]},"699":{"position":[[10,3]]},"798":{"position":[[20,3]]},"1009":{"position":[[0,3]]},"1022":{"position":[[12,3]]}}}],["load",{"_index":135,"t":{"774":{"position":[[0,4]]}}}],["local",{"_index":102,"t":{"734":{"position":[[19,7]]},"1047":{"position":[[9,5]]},"1049":{"position":[[21,5]]}}}],["long",{"_index":163,"t":{"812":{"position":[[53,4]]}}}],["lookup",{"_index":196,"t":{"930":{"position":[[32,6]]}}}],["machin",{"_index":205,"t":{"990":{"position":[[29,7]]}}}],["maco",{"_index":145,"t":{"782":{"position":[[35,5]]}}}],["make",{"_index":99,"t":{"730":{"position":[[0,4]]},"882":{"position":[[0,4]]}}}],["manag",{"_index":79,"t":{"687":{"position":[[38,10]]}}}],["mani",{"_index":144,"t":{"782":{"position":[[9,4]]}}}],["markdown",{"_index":41,"t":{"615":{"position":[[27,8]]},"617":{"position":[[27,8]]},"638":{"position":[[33,8]]},"643":{"position":[[27,8]]}}}],["marketplac",{"_index":53,"t":{"632":{"position":[[10,11]]}}}],["medium",{"_index":162,"t":{"812":{"position":[[46,6]]},"814":{"position":[[22,6]]},"816":{"position":[[61,6]]}}}],["merg",{"_index":13,"t":{"565":{"position":[[0,5]]}}}],["messag",{"_index":131,"t":{"772":{"position":[[39,7]]}}}],["model",{"_index":7,"t":{"559":{"position":[[13,5]]},"812":{"position":[[66,5]]},"908":{"position":[[17,5]]},"910":{"position":[[22,5]]},"962":{"position":[[8,5]]}}}],["more",{"_index":121,"t":{"765":{"position":[[0,4]]},"916":{"position":[[0,4]]}}}],["network",{"_index":50,"t":{"628":{"position":[[8,7]]}}}],["next",{"_index":21,"t":{"579":{"position":[[0,4]]},"607":{"position":[[0,4]]},"667":{"position":[[0,4]]},"705":{"position":[[0,4]]},"709":{"position":[[0,4]]},"872":{"position":[[0,4]]}}}],["nice",{"_index":113,"t":{"756":{"position":[[11,4]]}}}],["node",{"_index":49,"t":{"626":{"position":[[8,4]]},"665":{"position":[[15,4]]},"681":{"position":[[10,4]]},"683":{"position":[[13,4]]},"687":{"position":[[33,4]]},"712":{"position":[[0,4]]},"730":{"position":[[20,4]]},"732":{"position":[[11,4]]},"734":{"position":[[8,4]]},"740":{"position":[[38,4]]},"742":{"position":[[40,4]]},"744":{"position":[[27,4]]},"772":{"position":[[20,4]]},"802":{"position":[[35,4]]},"808":{"position":[[35,4]]},"814":{"position":[[42,4]]},"942":{"position":[[11,4]]},"964":{"position":[[8,4]]},"1082":{"position":[[11,4]]}}}],["note",{"_index":83,"t":{"691":{"position":[[10,5]]}}}],["now",{"_index":244,"t":{"1066":{"position":[[7,3]]}}}],["nvidia",{"_index":93,"t":{"720":{"position":[[11,6]]},"761":{"position":[[14,6]]}}}],["o",{"_index":143,"t":{"778":{"position":[[7,1]]}}}],["object",{"_index":138,"t":{"774":{"position":[[54,6]]}}}],["obsidian",{"_index":233,"t":{"1047":{"position":[[0,8]]},"1049":{"position":[[12,8]]},"1053":{"position":[[10,8]]}}}],["open",{"_index":45,"t":{"624":{"position":[[0,4]]},"774":{"position":[[42,4]]},"780":{"position":[[15,4]]},"782":{"position":[[14,4]]},"990":{"position":[[10,4]]},"992":{"position":[[4,4]]},"994":{"position":[[4,4]]}}}],["openai",{"_index":197,"t":{"940":{"position":[[4,6]]},"942":{"position":[[4,6]]},"1033":{"position":[[0,6]]}}}],["oper",{"_index":90,"t":{"712":{"position":[[5,9]]},"714":{"position":[[7,9]]}}}],["option",{"_index":20,"t":{"575":{"position":[[0,7]]},"603":{"position":[[0,7]]},"750":{"position":[[4,7]]},"868":{"position":[[0,7]]}}}],["os",{"_index":73,"t":{"677":{"position":[[0,4]]}}}],["page",{"_index":80,"t":{"687":{"position":[[49,4]]},"689":{"position":[[49,4]]}}}],["pars",{"_index":38,"t":{"615":{"position":[[0,5]]}}}],["pdf",{"_index":59,"t":{"638":{"position":[[19,3]]}}}],["permiss",{"_index":146,"t":{"784":{"position":[[0,10]]}}}],["phi",{"_index":161,"t":{"812":{"position":[[40,3]]},"814":{"position":[[16,3]]},"816":{"position":[[55,3]]}}}],["plugin",{"_index":174,"t":{"836":{"position":[[8,6]]},"892":{"position":[[8,6]]},"1047":{"position":[[19,6]]},"1049":{"position":[[31,6]]},"1051":{"position":[[14,6]]}}}],["port",{"_index":132,"t":{"772":{"position":[[47,4]]}}}],["pre",{"_index":84,"t":{"695":{"position":[[0,3]]}}}],["prepar",{"_index":230,"t":{"1037":{"position":[[0,7]]},"1039":{"position":[[0,7]]}}}],["prerequisit",{"_index":14,"t":{"569":{"position":[[0,13]]},"597":{"position":[[0,13]]},"663":{"position":[[0,13]]},"830":{"position":[[0,13]]},"840":{"position":[[0,13]]},"862":{"position":[[0,13]]},"876":{"position":[[0,13]]},"886":{"position":[[0,13]]},"900":{"position":[[0,13]]},"920":{"position":[[0,13]]},"926":{"position":[[0,13]]},"946":{"position":[[0,13]]},"970":{"position":[[0,13]]},"976":{"position":[[0,13]]},"982":{"position":[[0,13]]},"988":{"position":[[0,13]]},"1002":{"position":[[0,13]]},"1045":{"position":[[0,13]]},"1070":{"position":[[0,13]]}}}],["prompt",{"_index":89,"t":{"703":{"position":[[10,7]]}}}],["protect",{"_index":75,"t":{"683":{"position":[[0,7]]}}}],["public",{"_index":210,"t":{"1008":{"position":[[0,6]]}}}],["python",{"_index":198,"t":{"940":{"position":[[11,6]]}}}],["qna",{"_index":183,"t":{"904":{"position":[[18,3]]},"906":{"position":[[21,3]]}}}],["qualiti",{"_index":168,"t":{"818":{"position":[[26,7]]}}}],["queri",{"_index":28,"t":{"585":{"position":[[20,5]]},"591":{"position":[[21,5]]}}}],["question",{"_index":9,"t":{"561":{"position":[[9,8]]},"587":{"position":[[6,8]]}}}],["quick",{"_index":97,"t":{"726":{"position":[[0,5]]}}}],["quickstart",{"_index":150,"t":{"788":{"position":[[0,10]]}}}],["qwen",{"_index":225,"t":{"1025":{"position":[[0,4]]},"1027":{"position":[[0,4]]}}}],["rag",{"_index":209,"t":{"994":{"position":[[32,3]]}}}],["re",{"_index":98,"t":{"728":{"position":[[9,2]]}}}],["realist",{"_index":216,"t":{"1013":{"position":[[15,9]]}}}],["realtim",{"_index":194,"t":{"930":{"position":[[20,8]]}}}],["recov",{"_index":127,"t":{"770":{"position":[[10,7]]}}}],["reduc",{"_index":112,"t":{"756":{"position":[[0,6]]}}}],["remov",{"_index":141,"t":{"776":{"position":[[10,6]]}}}],["replac",{"_index":229,"t":{"1033":{"position":[[11,11]]}}}],["resourc",{"_index":122,"t":{"765":{"position":[[5,9]]}}}],["respons",{"_index":34,"t":{"591":{"position":[[0,8]]}}}],["retriev",{"_index":32,"t":{"589":{"position":[[0,8]]},"960":{"position":[[0,8]]}}}],["robust",{"_index":178,"t":{"882":{"position":[[8,6]]}}}],["run",{"_index":92,"t":{"720":{"position":[[0,7]]},"722":{"position":[[0,7]]},"800":{"position":[[8,7]]},"802":{"position":[[10,3]]},"804":{"position":[[9,3]]},"806":{"position":[[8,7]]},"808":{"position":[[9,3]]},"810":{"position":[[9,3],[38,3]]},"812":{"position":[[8,7]]},"814":{"position":[[10,3]]},"816":{"position":[[19,3]]},"844":{"position":[[0,3]]},"878":{"position":[[0,3]]},"922":{"position":[[0,3]]},"972":{"position":[[0,3]]},"978":{"position":[[0,3]]},"1004":{"position":[[0,3]]}}}],["rust",{"_index":222,"t":{"1020":{"position":[[0,4]]}}}],["s",{"_index":108,"t":{"748":{"position":[[5,1]]}}}],["script",{"_index":148,"t":{"784":{"position":[[41,6]]}}}],["segment",{"_index":246,"t":{"1078":{"position":[[0,7]]}}}],["select",{"_index":87,"t":{"699":{"position":[[0,6]]},"701":{"position":[[0,6]]}}}],["server",{"_index":181,"t":{"902":{"position":[[18,6]]},"928":{"position":[[18,6]]}}}],["set",{"_index":11,"t":{"561":{"position":[[29,3]]},"695":{"position":[[4,3]]},"912":{"position":[[0,3]]}}}],["setup",{"_index":234,"t":{"1047":{"position":[[26,5]]}}}],["share",{"_index":137,"t":{"774":{"position":[[47,6]]}}}],["side",{"_index":208,"t":{"994":{"position":[[27,4]]}}}],["similar",{"_index":33,"t":{"589":{"position":[[9,7]]}}}],["snapshot",{"_index":19,"t":{"573":{"position":[[29,8]]},"577":{"position":[[16,8]]},"601":{"position":[[29,8]]},"605":{"position":[[16,8]]},"770":{"position":[[34,8]]},"866":{"position":[[29,8]]},"870":{"position":[[16,8]]},"1080":{"position":[[13,8]]}}}],["sourc",{"_index":46,"t":{"624":{"position":[[5,6]]}}}],["sovit",{"_index":219,"t":{"1015":{"position":[[19,6]]}}}],["specif",{"_index":104,"t":{"742":{"position":[[12,8]]}}}],["spell",{"_index":237,"t":{"1060":{"position":[[0,8]]}}}],["start",{"_index":15,"t":{"571":{"position":[[0,5]]},"599":{"position":[[0,5]]},"653":{"position":[[0,5]]},"726":{"position":[[6,5]]},"728":{"position":[[12,5]]},"772":{"position":[[10,5]]},"864":{"position":[[0,5]]},"902":{"position":[[0,5]]},"928":{"position":[[0,5]]},"990":{"position":[[0,5]]}}}],["statu",{"_index":202,"t":{"966":{"position":[[0,6]]}}}],["step",{"_index":22,"t":{"579":{"position":[[5,5]]},"607":{"position":[[5,5]]},"611":{"position":[[0,5]]},"667":{"position":[[5,5]]},"687":{"position":[[0,5]]},"689":{"position":[[0,5]]},"705":{"position":[[5,5]]},"709":{"position":[[5,5]]},"802":{"position":[[0,4]]},"804":{"position":[[0,4]]},"808":{"position":[[0,4]]},"810":{"position":[[0,4]]},"814":{"position":[[0,4]]},"816":{"position":[[0,4]]},"858":{"position":[[0,5]]},"872":{"position":[[5,5]]},"896":{"position":[[0,5]]},"936":{"position":[[0,5]]},"984":{"position":[[0,5]]},"998":{"position":[[0,5]]}}}],["stop",{"_index":67,"t":{"655":{"position":[[0,4]]},"728":{"position":[[0,4]]}}}],["subcommand",{"_index":86,"t":{"697":{"position":[[11,10]]}}}],["such",{"_index":139,"t":{"774":{"position":[[70,4]]}}}],["summar",{"_index":236,"t":{"1058":{"position":[[0,13]]}}}],["supervis",{"_index":111,"t":{"754":{"position":[[4,9]]}}}],["supplement",{"_index":29,"t":{"585":{"position":[[41,12]]}}}],["support",{"_index":70,"t":{"671":{"position":[[0,9]]}}}],["system",{"_index":123,"t":{"768":{"position":[[4,6]]}}}],["task",{"_index":232,"t":{"1039":{"position":[[25,4]]}}}],["telegram",{"_index":151,"t":{"790":{"position":[[2,8]]}}}],["templat",{"_index":187,"t":{"906":{"position":[[25,8]]}}}],["text",{"_index":212,"t":{"1011":{"position":[[9,4]]},"1013":{"position":[[0,4]]},"1015":{"position":[[0,4]]},"1056":{"position":[[0,4]]},"1078":{"position":[[13,4]]}}}],["token",{"_index":51,"t":{"630":{"position":[[8,5]]}}}],["tool",{"_index":57,"t":{"638":{"position":[[0,5]]},"639":{"position":[[0,4]]},"641":{"position":[[0,4]]},"994":{"position":[[36,4]]}}}],["toolkit",{"_index":120,"t":{"763":{"position":[[19,7]]}}}],["top",{"_index":158,"t":{"804":{"position":[[38,3]]},"810":{"position":[[45,3]]},"816":{"position":[[48,3]]}}}],["translat",{"_index":154,"t":{"798":{"position":[[24,11]]},"800":{"position":[[16,11]]},"804":{"position":[[17,11]]},"806":{"position":[[16,11]]},"810":{"position":[[17,11]]},"812":{"position":[[16,11]]},"816":{"position":[[27,11]]},"818":{"position":[[14,11]]},"1039":{"position":[[13,11]]},"1041":{"position":[[0,9]]}}}],["tri",{"_index":193,"t":{"914":{"position":[[10,3]]},"932":{"position":[[10,3]]},"1066":{"position":[[0,3]]}}}],["trump",{"_index":169,"t":{"824":{"position":[[8,5]]}}}],["tune",{"_index":2,"t":{"557":{"position":[[15,4]]},"561":{"position":[[42,6]]}}}],["ubuntu",{"_index":115,"t":{"760":{"position":[[0,6]]}}}],["ui",{"_index":206,"t":{"992":{"position":[[28,2]]}}}],["uninstal",{"_index":107,"t":{"746":{"position":[[0,9]]}}}],["up",{"_index":191,"t":{"912":{"position":[[4,2]]}}}],["updat",{"_index":105,"t":{"744":{"position":[[0,6]]},"1082":{"position":[[0,6]]}}}],["url",{"_index":39,"t":{"615":{"position":[[10,3]]}}}],["us",{"_index":110,"t":{"754":{"position":[[0,3]]},"772":{"position":[[63,3]]},"784":{"position":[[23,3]]},"826":{"position":[[9,3]]},"836":{"position":[[0,3]]},"880":{"position":[[0,3]]},"892":{"position":[[0,3]]},"950":{"position":[[0,3]]},"992":{"position":[[0,3]]},"994":{"position":[[0,3]]},"1055":{"position":[[0,3]]},"1074":{"position":[[0,3]]}}}],["user",{"_index":27,"t":{"585":{"position":[[15,4]]},"591":{"position":[[16,4]]},"710":{"position":[[0,5]]}}}],["util",{"_index":3,"t":{"557":{"position":[[20,7]]}}}],["v2",{"_index":214,"t":{"1011":{"position":[[23,2]]}}}],["valu",{"_index":114,"t":{"756":{"position":[[16,5]]}}}],["vector",{"_index":16,"t":{"571":{"position":[[8,6]]},"573":{"position":[[11,6]]},"577":{"position":[[9,6]]},"599":{"position":[[8,6]]},"601":{"position":[[11,6]]},"605":{"position":[[9,6]]},"864":{"position":[[8,6]]},"866":{"position":[[11,6]]},"870":{"position":[[9,6]]}}}],["version",{"_index":65,"t":{"649":{"position":[[0,7]]},"740":{"position":[[19,7]]},"742":{"position":[[21,7]]}}}],["vision",{"_index":217,"t":{"1013":{"position":[[25,6]]}}}],["voic",{"_index":211,"t":{"1011":{"position":[[0,5]]},"1015":{"position":[[8,5]]}}}],["wasmedg",{"_index":149,"t":{"784":{"position":[[59,8]]}}}],["web",{"_index":228,"t":{"1031":{"position":[[0,3]]}}}],["webui",{"_index":204,"t":{"990":{"position":[[15,5]]},"992":{"position":[[9,5]]},"994":{"position":[[9,5]]}}}],["whisper",{"_index":213,"t":{"1011":{"position":[[15,7]]}}}],["window",{"_index":128,"t":{"770":{"position":[[46,7]]}}}],["workflow",{"_index":23,"t":{"583":{"position":[[0,8]]}}}],["wsl",{"_index":129,"t":{"770":{"position":[[54,3]]}}}],["zed",{"_index":245,"t":{"1072":{"position":[[10,3]]},"1074":{"position":[[4,3]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":556,"t":"The popular llama.cpp tool comes with a finetune utility. It works well on CPUs! This fine-tune guide is reproduced with permission from Tony Yuan's Finetune an open-source LLM for the chemistry subject project.","s":"llama.cpp","u":"/1.0.0/creator-guide/finetune/llamacpp","h":"","p":555},{"i":558,"t":"The finetune utility in llama.cpp can work with quantized GGUF files on CPUs, and hence dramatically reducing the hardware requirements and expenses for fine-tuning LLMs. Check out and download the llama.cpp source code. git clone https://github.com/ggerganov/llama.cpp cd llama.cpp Build the llama.cpp binary. mkdir build cd build cmake .. cmake --build . --config Release If you have NVIDIA GPU and CUDA toolkit installed, you should build llama.cpp with CUDA support. mkdir build cd build cmake .. -DLLAMA_CUBLAS=ON -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc cmake --build . --config Release","s":"Build the fine-tune utility from llama.cpp","u":"/1.0.0/creator-guide/finetune/llamacpp","h":"#build-the-fine-tune-utility-from-llamacpp","p":555},{"i":560,"t":"We are going to use Meta's Llama2 chat 13B model as the base model. Note that we are using a Q5 quantized GGUF model file directly to save computing resources. You can use any of the Llama2 compatible GGUF models on Hugging Face. cd .. # change to the llama.cpp directory cd models/ curl -LO https://huggingface.co/gaianet/Llama-2-13B-Chat-GGUF/resolve/main/llama-2-13b-chat.Q5_K_M.gguf","s":"Get the base model","u":"/1.0.0/creator-guide/finetune/llamacpp","h":"#get-the-base-model","p":555},{"i":562,"t":"Next we came up with 1700+ pairs of QAs for the chemistry subject. It is like the following in a CSV file. Question Answer What is unique about hydrogen? It's the most abundant element in the universe, making up over 75% of all matter. What is the main component of Jupiter? Hydrogen is the main component of Jupiter and the other gas giant planets. Can hydrogen be used as fuel? Yes, hydrogen is used as rocket fuel. It can also power fuel cells to generate electricity. What is mercury's atomic number? The atomic number of mercury is 80 What is Mercury? Mercury is a silver colored metal that is liquid at room temperature. It has an atomic number of 80 on the periodic table. It is toxic to humans. We used GPT-4 to help me come up many of these QAs. Then, we wrote a Python script to convert each row in the CSV file into a sample QA in the Llama2 chat template format. Notice that each QA pair starts with as an indicator for the fine-tune program to start a sample. The result train.txt file can now be used in fine-tuning. Put the train.txt file in the llama.cpp/models directory with the GGUF base model.","s":"Create a question and answer set for fine-tuning","u":"/1.0.0/creator-guide/finetune/llamacpp","h":"#create-a-question-and-answer-set-for-fine-tuning","p":555},{"i":564,"t":"Use the following command to start the fine-tuning process on your CPUs. I am putting it in the background so that it can run continuously now. It could take several days or even a couple of weeks depending on how many CPUs you have. nohup ../build/bin/finetune --model-base llama-2-13b-chat.Q5_K_M.gguf --lora-out lora.bin --train-data train.txt --sample-start '' --adam-iter 1024 & You can check the process every few hours in the nohup.out file. It will report the loss for each iteration. You can stop the process when the loss goes consistently under 0.1. Note 1 If you have multiple CPUs (or CPU cores), you can speed up the fine-tuning process by adding a -t parameter to the above command to use more threads. For example, if you have 60 CPU cores, you could do -t 60 to use all of them. Note 2 If your fine-tuning process is interrupted, you can restart it from checkpoint-250.gguf. The next file it outputs is checkpoint-260.gguf. nohup ../build/bin/finetune --model-base llama-2-13b-chat.Q5_K_M.gguf --checkpoint-in checkpoint-250.gguf --lora-out lora.bin --train-data train.txt --sample-start '' --adam-iter 1024 &","s":"Finetune!","u":"/1.0.0/creator-guide/finetune/llamacpp","h":"#finetune","p":555},{"i":566,"t":"The fine-tuning process updates several layers of the LLM's neural network. Those updated layers are saved in a file called lora.bin and you can now merge them back to the base LLM to create the new fine-tuned LLM. ../build/bin/export-lora --model-base llama-2-13b-chat.Q5_K_M.gguf --lora lora.bin --model-out chemistry-assistant-13b-q5_k_m.gguf The result is this file. curl -LO https://huggingface.co/juntaoyuan/chemistry-assistant-13b/resolve/main/chemistry-assistant-13b-q5_k_m.gguf Note 3 If you want to use a checkpoint to generate a lora.bin file, use the following command. This is needed when you believe the final lora.bin is an overfit. ../build/bin/finetune --model-base llama-2-13b-chat.Q5_K_M.gguf --checkpoint-in checkpoint-250.gguf --only-write-lora --lora-out lora.bin","s":"Merge","u":"/1.0.0/creator-guide/finetune/llamacpp","h":"#merge","p":555},{"i":568,"t":"In this section, we will discuss how to create a vector collection snapshot for optimal retrieval of long-form text documents. The approach is to create two columns of text in a CSV file. The first column is the long-form source text from the knowledge document, such as a book chapter or a markdown section. The long-form source text is difficult to search. The second column is a \"search-friendly\" summary of the source text. It could contain a list of questions that can be answered by the first column source text. We will create a vector snapshot where each vector is computed from the summary text (second column), but the retrieved source text for that vector is from the first column. The snapshot file can then be loaded by a Gaia node as its knowledge base. We have a simple Python script to build properly formatted CSV files from a set of articles or chapters. See how it works.","s":"Knowledge base from source / summary pairs","u":"/1.0.0/creator-guide/knowledge/csv","h":"","p":567},{"i":570,"t":"Install the WasmEdge Runtime, the cross-platform LLM runtime. curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install_v2.sh | bash -s Download an embedding model. curl -LO https://huggingface.co/gaianet/Nomic-embed-text-v1.5-Embedding-GGUF/resolve/main/nomic-embed-text-v1.5.f16.gguf The embedding model is a special kind of LLM that turns sentences into vectors. The vectors can then be stored in a vector database and searched later. When the sentences are from a body of text that represents a knowledge domain, that vector database becomes our RAG knowledge base.","s":"Prerequisites","u":"/1.0.0/creator-guide/knowledge/csv","h":"#prerequisites","p":567},{"i":572,"t":"By default, we use Qdrant as the vector database. You can start a Qdrant instance by starting a Gaia node with a knowledge snapshot. note Or, you can start a Qdrant server using Docker. The following command starts it in the background. mkdir qdrant_storage mkdir qdrant_snapshots nohup docker run -d -p 6333:6333 -p 6334:6334 \\ -v $(pwd)/qdrant_storage:/qdrant/storage:z \\ -v $(pwd)/qdrant_snapshots:/qdrant/snapshots:z \\ qdrant/qdrant","s":"Start a vector database","u":"/1.0.0/creator-guide/knowledge/csv","h":"#start-a-vector-database","p":567},{"i":574,"t":"Delete the default collection if it exists. curl -X DELETE 'http://localhost:6333/collections/default' Create a new collection called default. Notice that it is 768 dimensions. That is the output vector size of the embedding model nomic-embed-text-v1.5. If you are using a different embedding model, you should use a dimension that fits the model. curl -X PUT 'http://localhost:6333/collections/default' \\ -H 'Content-Type: application/json' \\ --data-raw '{ \"vectors\": { \"size\": 768, \"distance\": \"Cosine\", \"on_disk\": true } }' Download a program to create embeddings from the CSV file. curl -LO https://github.com/GaiaNet-AI/embedding-tools/raw/main/csv_embed/csv_embed.wasm You can check out the Rust source code here and modify it if you need to use a different CSV layout. Next, you can run the program by passing a collection name, vector dimension, and the CSV document. The --ctx_size option matches the embedding model's context window size, which in this case is 8192 tokens allowing it to process long sections of text. Make sure that Qdrant is running on your local machine. The model is preloaded under the name embedding. The wasm app then uses the embedding model to create the 768-dimension vectors from paris.csv and saves them into the default collection. curl -LO https://huggingface.co/datasets/gaianet/paris/raw/main/paris.csv wasmedge --dir .:. \\ --nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \\ csv_embed.wasm embedding default 768 paris.csv --ctx_size 8192","s":"Create the vector collection snapshot","u":"/1.0.0/creator-guide/knowledge/csv","h":"#create-the-vector-collection-snapshot","p":567},{"i":576,"t":"You can pass the following options to the program. Using -c or --ctx_size to specify the context size of the input. This defaults to 512. Using -m or --maximum_context_length to specify a context length in the CLI argument. That is to truncate and warn for each text segment that goes above the context length. Using -s or --start_vector_id to specify the start vector ID in the CLI argument. This will allow us to run this app multiple times on multiple documents on the same vector collection. Example: the above example but to append the London guide to the end of an existing collection starting from index 42. wasmedge --dir .:. \\ --nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \\ csv_embed.wasm embedding default 768 london.csv -c 8192 -l 1 -s 42","s":"Options","u":"/1.0.0/creator-guide/knowledge/csv","h":"#options","p":567},{"i":578,"t":"You can create a snapshot of the collection, which can be shared and loaded into a different Qdrant database. You can find the snapshot file in the qdrant_snapshots directory, or the ~/gaianet/qdrant/snapshots directory in the Gaia node. curl -X POST 'http://localhost:6333/collections/default/snapshots' We also recommend you to compress the snapshot file. tar czvf my.snapshot.tar.gz my.snapshot Finally, upload the my.snapshot.tar.gz file to Huggingface so that the Gaia node can download and use it.","s":"Create a vector snapshot","u":"/1.0.0/creator-guide/knowledge/csv","h":"#create-a-vector-snapshot","p":567},{"i":580,"t":"Start a new Gaia node Customize the Gaia node Have fun!","s":"Next steps","u":"/1.0.0/creator-guide/knowledge/csv","h":"#next-steps","p":567},{"i":582,"t":"The LLM app requires both long-term and short-term memories. Long-term memory includes factual knowledge, historical facts, background stories etc. They are best added to the context as complete chapters instead of small chunks of text to maintain the internal consistency of the knowledge. RAG is an important technique to inject contextual knowledge into an LLM application. It improves accuracy and reduces the hallucination of LLMs. An effective RAG application combines real-time and user-specific short-term memory (chunks) with stable long-term memory (chapters) in the prompt context. Since the application's long-term memory is stable (even immutable), we package it in a vector database tightly coupled with the LLM. The client app assembles the short-term memory in the prompt and is supplemented with the long-term memory on the LLM server. We call the approach \"server-side RAG\". The long context length supported by modern LLMs are especially well-suited for long-term knowledge that are best represented by chapters of text. A Gaia node is an OpenAI compatible LLM service that is grounded by long-term knowledge on the server side. The client application can simply chat with it or provide realtime / short-term memory since the LLM is already aware of the domain or background. For example, if you ask ChatGPT the question What is Layer 2, the answer is that Layer 2 is a concept from the computer network. However, if you ask a blockchain person, they answer that Layer 2 is a way to scale the original Ethereum network. That's the difference between a generic LLM and knowledge-supplemented LLMs. We will cover the external knowledge preparation and how a knowledge-supplemented LLM completes a conversation. If you have learned how a RAG application works, go to Build a RAG application with Gaia to start building one. Create embeddings for your own knowledge as the long-term memory. Lifecycle of a user query on a knowledge-supplemented LLM. For this solution, we will use a chat model like Llama-3-8B for generating responses to the user. a text embedding model like nomic-embed-text for creating and retrieving embeddings. a Vector DB like Qdrant for storing embeddings.","s":"Gaia nodes with long-term knowledge","u":"/1.0.0/creator-guide/knowledge/concepts","h":"","p":581},{"i":584,"t":"The first step is to create embeddings for our knowledge base and store the embeddings in a vector DB. First of all, we split the long text into sections (i.e, chunks). All LLMs have a maximum context length. The model can't read the context if the text is too long. The most used rule for a Gaia node is to put the content in one chapter together. Remember, insert a blank line between two chunks. You can also use other algorithms to chunk your text. After chunking the document, we can convert these chunks into embeddings leveraging the embedding model. The embedding model is trained to create embeddings based on text and search for similar embeddings. We will use the latter function in the process of user query. Additionally, we will need a vector DB to store the embeddings so that we can retrieve these embeddings quickly at any time. On a Gaia node, we will get a database snapshot with the embeddings to use at last. Check out how to create your embeddings using Gaia web tool, from a plain text file, and from a markdown file.","s":"Workflow for creating knowledge embeddings","u":"/1.0.0/creator-guide/knowledge/concepts","h":"#workflow-for-creating-knowledge-embeddings","p":581},{"i":586,"t":"Next, let's learn the lifecycle of a user query on a knowledge-supplemented LLM. We will take a Gaia Node with Gaia knowledge as an example.","s":"Lifecycle of a user query on a knowledge-supplemented LLM","u":"/1.0.0/creator-guide/knowledge/concepts","h":"#lifecycle-of-a-user-query-on-a-knowledge-supplemented-llm","p":581},{"i":588,"t":"when you send a question in human language to the node, the embedding model will first convert your question to embedding.","s":"Ask a question","u":"/1.0.0/creator-guide/knowledge/concepts","h":"#ask-a-question","p":581},{"i":590,"t":"Then, the embedding model will search all the embeddings stored in the Qdrant vector DB and retrieve the embeddings that are similar to the question embeddings.","s":"Retrieve similar embeddings","u":"/1.0.0/creator-guide/knowledge/concepts","h":"#retrieve-similar-embeddings","p":581},{"i":592,"t":"The embedding node will return the retrieved embeddings to the chat model. The chat model will use the retrieved embeddings plus your input questions as context to answer your queries finally.","s":"Response to the user query","u":"/1.0.0/creator-guide/knowledge/concepts","h":"#response-to-the-user-query","p":581},{"i":594,"t":"You could fine-tune an open-source LLM to Teach it to follow conversations. Teach it to respect and follow instructions. Make it refuse to answer certain questions. Give it a specific \"speaking\" style. Make it response in certain formats (e.g., JSON). Give it focus on a specific domain area. Teach it certain knowledge. To do that, you need to create a set of question and answer pairs to show the model the prompt and the expected response. Then, you can use a fine-tuning tool to perform the training and make the model respond the expected answer for each question.","s":"Fine-tune LLMs","u":"/1.0.0/creator-guide/finetune/intro","h":"","p":593},{"i":596,"t":"In this section, we will discuss how to create a vector collection snapshot from a markdown file. The snapshot file can then be loaded by a Gaia node as its knowledge base. The markdown file is segmented into multiple sections by headings. See an example. Each section is turned into a vector, and when retrieved, added to the prompt context for the LLM.","s":"Knowledge base from a markdown file","u":"/1.0.0/creator-guide/knowledge/markdown","h":"","p":595},{"i":598,"t":"Install the WasmEdge Runtime, the cross-platform LLM runtime. curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install_v2.sh | bash -s Download an embedding model. curl -LO https://huggingface.co/gaianet/Nomic-embed-text-v1.5-Embedding-GGUF/resolve/main/nomic-embed-text-v1.5.f16.gguf The embedding model is a special kind of LLM that turns sentences into vectors. The vectors can then be stored in a vector database and searched later. When the sentences are from a body of text that represents a knowledge domain, that vector database becomes our RAG knowledge base.","s":"Prerequisites","u":"/1.0.0/creator-guide/knowledge/markdown","h":"#prerequisites","p":595},{"i":600,"t":"By default, we use Qdrant as the vector database. You can start a Qdrant instance by starting a Gaia node with a knowledge snapshot. note Or, you can start a Qdrant server using Docker. The following command starts it in the background. mkdir qdrant_storage mkdir qdrant_snapshots nohup docker run -d -p 6333:6333 -p 6334:6334 \\ -v $(pwd)/qdrant_storage:/qdrant/storage:z \\ -v $(pwd)/qdrant_snapshots:/qdrant/snapshots:z \\ qdrant/qdrant","s":"Start a vector database","u":"/1.0.0/creator-guide/knowledge/markdown","h":"#start-a-vector-database","p":595},{"i":602,"t":"Delete the default collection if it exists. curl -X DELETE 'http://localhost:6333/collections/default' Create a new collection called default. Notice that it is 768 dimensions. That is the output vector size of the embedding model nomic-embed-text-v1.5. If you are using a different embedding model, you should use a dimension that fits the model. curl -X PUT 'http://localhost:6333/collections/default' \\ -H 'Content-Type: application/json' \\ --data-raw '{ \"vectors\": { \"size\": 768, \"distance\": \"Cosine\", \"on_disk\": true } }' Download a program to segment the markdown document and create embeddings. curl -LO https://github.com/GaiaNet-AI/embedding-tools/raw/main/markdown_embed/markdown_embed.wasm It chunks the document based on markdown sections. You can check out the Rust source code here and modify it if you need to use a different chunking strategy. Next, you can run the program by passing a collection name, vector dimension, and the source document. You can pass in the desired markdown heading level for chunking using the --heading_level option. The --ctx_size option matches the embedding model's context window size, which in this case is 8192 tokens allowing it to process long sections of text. Make sure that Qdrant is running on your local machine. The model is preloaded under the name embedding. The wasm app then uses the embedding model to create the 768-dimension vectors from paris.md and saves them into the default collection. curl -LO https://huggingface.co/datasets/gaianet/paris/raw/main/paris.md wasmedge --dir .:. \\ --nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \\ markdown_embed.wasm embedding default 768 paris.md --heading_level 1 --ctx_size 8192","s":"Create the vector collection snapshot","u":"/1.0.0/creator-guide/knowledge/markdown","h":"#create-the-vector-collection-snapshot","p":595},{"i":604,"t":"You can pass the following options to the program. Using -c or --ctx_size to specify the context size of the input. This defaults to 512. Using -l or --heading_level to specify the markdown heading level for each vector. This defaults to 1. Using -m or --maximum_context_length to specify a context length in the CLI argument. That is to truncate and warn for each text segment that goes above the context length. Using -s or --start_vector_id to specify the start vector ID in the CLI argument. This will allow us to run this app multiple times on multiple documents on the same vector collection. Example: the above example but to append the London guide to the end of an existing collection starting from index 42. wasmedge --dir .:. \\ --nn-preload embedding:GGML:AUTO:nomic-embed-text-v1.5.f16.gguf \\ markdown_embed.wasm embedding default 768 london.md -c 8192 -l 1 -s 42","s":"Options","u":"/1.0.0/creator-guide/knowledge/markdown","h":"#options","p":595},{"i":606,"t":"You can create a snapshot of the collection, which can be shared and loaded into a different Qdrant database. You can find the snapshot file in the qdrant_snapshots directory, or the ~/gaianet/qdrant/snapshots directory in the Gaia node. curl -X POST 'http://localhost:6333/collections/default/snapshots' We also recommend you to compress the snapshot file. tar czvf my.snapshot.tar.gz my.snapshot Finally, upload the my.snapshot.tar.gz file to Huggingface so that the Gaia node can download and use it.","s":"Create a vector snapshot","u":"/1.0.0/creator-guide/knowledge/markdown","h":"#create-a-vector-snapshot","p":595},{"i":608,"t":"Start a new Gaia node Customize the Gaia node Have fun!","s":"Next steps","u":"/1.0.0/creator-guide/knowledge/markdown","h":"#next-steps","p":595},{"i":610,"t":"This guide provides all the information you need to quickly set up and run a Gaia Domain. Note: Ensure that you are the owner of a Gaia Domain Name before proceeding. You can verify your Gaia Domain Name in the \"Assets\" section of your profile. Gaia simplifies the process for domain operators to launch and host a Gaia Domain service in just a few clicks.","s":"Quick Start with Launching Gaia Domain","u":"/1.0.0/domain-guide/quick-start","h":"","p":609},{"i":612,"t":"Access the Create Gaia Domain Page Click LAUNCH DOMAIN in the \"Domain\" or \"Assets\" section under your profile. This will take you to the Create Gaia Domain page. Fill in Domain Details Enter the general information for your domain, including: Domain profile Domain Name Description System Prompt Choose a Gaia Domain Name Select a Gaia domain name from your assets. Select a Supplier Currently, Gaia Cloud is the only supplier. Pick a Gaia Domain Tier Choose a tier to enhance your domain's rewards, which is necessary. Configure Server and Management Options Confirm the server configuration for running your domain. Set management preferences, such as whether nodes can join automatically and the specific LLM to use. After completing these six steps, your Gaia Domain will be successfully launched and other nodes can join your domain.","s":"Steps to Launch Your Gaia Domain","u":"/1.0.0/domain-guide/quick-start","h":"#steps-to-launch-your-gaia-domain","p":609},{"i":614,"t":"In this section, we will discuss how to create a vector collection snapshot from a Web URL. First, we will parse the URL to a structured markdown file. Then, we will follow the steps from Knowledge base from a markdown file to create embedding for your URL.","s":"Knowledge base from a URL","u":"/1.0.0/creator-guide/knowledge/firecrawl","h":"","p":613},{"i":616,"t":"Firecrawl can crawl and convert any website into LLM-ready markdown or structured data. It also supports crawling a URL and all accessible subpages. To use Firecrawl, you need to sign up on Firecrawl and get an API key. First, install the dependencies. We are assuming that you already have Node.JS 20+ installed. git clone https://github.com/JYC0413/firecrawl-integration.git cd firecrawl-integration npm install Then, export the API key in the terminal. export FIRECRAWL_KEY=\"your_api_key_here\" next, we can use the following command line to run the service. node crawlWebToMd.js After the application is running successfully, you will see the prompt appear on the Terminal. You can type your URL in the terminal right now. Here we have two choices. Multiple pages: input your link with / at the end, the program will crawl and convert the page and its subpages to one single markdown file. This way will cost lots of API token usage. One single page: input your link without / at the end. the program will crawl and convert the current page to one single markdown file. The output markdown file will be located in this folder named output.md.","s":"Parse the URL content to a markdown file","u":"/1.0.0/creator-guide/knowledge/firecrawl","h":"#parse-the-url-content-to-a-markdown-file","p":613},{"i":618,"t":"Please follow the tutorial Knowledge base from a markdown file to convert your markdown file to a snapshot of embeddings that can be imported into a GaiaNet node.","s":"Create embeddings from the markdown files","u":"/1.0.0/creator-guide/knowledge/firecrawl","h":"#create-embeddings-from-the-markdown-files","p":613},{"i":621,"t":"Specialized, finetuned and RAG-enhanced open-source Large Language Models are key elements in emerging AI agent applications. However, those agent apps also present unique challenges to the traditional cloud computing and SaaS infrastructure, including new requirements for application portability, virtualization, security isolation, costs, data privacy, and ownership. GaiaNet is a decentralized computing infrastructure that enables everyone to create, deploy, scale, and monetize their own AI agents that reflect their styles, values, knowledge, and expertise. A GaiaNet node consists of a high-performance and cross-platform application runtime, a finetuned LLM, a knowledge embedding model, a vector database, a prompt manager, an open API server, and a plugin system for calling external tools and functions using LLM outputs. It can be deployed by any knowledge worker as a digital twin and offered as a web API service. A new class of tradeable assets and a marketplace could be created from individualized knowledge bases and components. Similar GaiaNet nodes are organized into GaiaNet domains, which offer trusted and reliable AI agent services to the public. The GaiaNet node and domains are governed by the GaiaNet DAO (Decentralized Autonomous Organization). Through Purpose Bound Money smart contracts, the GaiaNet network is a decentralized marketplace for AI agent services.","s":"Abstract","u":"/1.0.0/litepaper","h":"#abstract","p":619},{"i":623,"t":"The emergence of ChatGPT and Large Language Model (LLM) has revolutionized how humans produce and consume knowledge. Within a year, AI-native applications have evolved from chatbots to copilots, to agents. AI agents would increasingly evolve from supportive tools (akin to Copilots) to autonomous entities capable of completing tasks independently. — Dr. Andrew Ng at Sequoia Capital AI Ascent 2024 Summit Agents are software applications that can complete tasks on its own autonomously like a human. The agent can understand the task, plan the steps to complete the task, execute all the steps, handle errors and exceptions, and deliver the results. While a powerful LLM could act as the “brain” for the agent, we need to connect to external data sources (eyes and ears), domain-specific knowledge base and prompts (skills), context stores (memory), and external tools (hands). For agent tasks, we often need to customize the LLM itself to reduce hallucinations in a specific domain. to generate responses in a specific format (e.g., a JSON schema). to answer “politically incorrect” questions (e.g., to analyze CVE exploits for an agent in the security domain). and to answer requests in a specific style (e.g., to mimic a person). Agents are complex software that require significant amount of engineering and resources. Today, most agents are close-source and hosted on SaaS-based LLMs. Popular examples include GPTs and Microsoft/GitHub copilots on OpenAI LLMs, and Duet on Google’s Gemini LLMs. However, as we discussed, a key requirement for agents is to customize and adapt its underlying LLM and software stack for domain-specific tasks — an area where centralized SaaS perform very poorly. For example, with ChatGPT, every small task must be handled by a very large model. It is also enormously expensive to fine-tune or modify any ChatGPT models. The one-size-fits-all LLMs are detrimental to the agent use case in capabilities, alignment, and cost structure. Furthermore, the SaaS hosted LLMs lack privacy controls on how the agent’s private knowledge might be used and shared. Because of these shortcomings, it is difficult for individual knowledge workers to create and monetize agents for his or her own domain and tasks on SaaS platforms like OpenAI, Google, Anthropic, Microsoft and AWS. In this paper, we propose a decentralized software platform and protocol network for AI agents for everyone. Specifically, our goals are two-folds. Goal #1: Empower individuals to incorporate his/her private knowledge and expertise into personal LLM agent apps. Those apps aim to perform knowledge tasks and use tools just as the individual would, but also reflect the individual’s style and values. Goal #2: Enable individuals to provide and scale their LLM agents as services, and get compensated for their expertise and work. GaiaNet is “YouTube for knowledge and skills.”","s":"Introduction","u":"/1.0.0/litepaper","h":"#introduction","p":619},{"i":625,"t":"As of April 2024, there are over 6000 open-source LLMs published on Hugging face. Compared with close-source LLMs, such as GPT-4, open-source LLMs offer advantages in privacy, cost, and systematic bias. Even with general QA performance, open-source LLMs are closing the gap with close-source counterparties quickly. For AI agent use cases, it has been demonstrated that smaller but task-specific LLMs often outperform larger general models. However, it is difficult for individuals and businesses to deploy and orchestrate multiple finetuned LLMs on their own heterogeneous GPU infrastructure. The complex software stack for agents, as well as the complex interaction with external tools, are fragile and error-prone. Furthermore, LLM agents have entirely different scaling characteristics than past application servers. LLM is extremely computationally intensive. A LLM agent server can typically only serve one user at a time, and it often blocks for seconds at a time. The scaling need is no longer to handle many async requests on a single server, but to load balance among many discrete servers on the internet scale. The GaiaNet project provides a cross-platform and highly efficient SDK and runtime for finetuned open-source LLMs with proprietary knowledge bases, customized prompts, structured responses, and external tools for function calling. A GaiaNet node can be started in minutes on any personal, cloud, or edge device. It can then offer services through an incentivized web3 network.","s":"Open-source and decentralization","u":"/1.0.0/litepaper","h":"#open-source-and-decentralization","p":619},{"i":627,"t":"The basic operational unit in the GaiaNet network is a node. A GaiaNet node is a streamlined software stack that allows any technically competent person to run an AI agent of his own. The software stack on the GaiaNet node consists of the following 7 key components. 1 Application runtime. GaiaNet applications run in a lightweight, secure and high-performance sandbox called WasmEdge. As an open-source project managed by the Linux Foundation and CNCF, WasmEdge runtime works seamlessly with leading cloud native tools such as Docker, containerd, CRI-O, Podman and Kubernetes. It is also the virtual machine of choice by leading public blockchains to securely and efficiently execute on-chain and off-chain smart contracts. WasmEdge is a high-performance and cross-platform runtime. It can run AI models on almost all CPUs, GPUs, and AI accelerators at native speed, making it an ideal runtime for decentralized AI agents. 2 Finetuned LLM. The GaiaNet node supports almost all open-source LLMs, multimodal models (eg Large Vision Models or LVMs), text-to-image models (eg Stable Diffusion) and text-to-video models. That includes all finetuned models using personal or proprietary data. The node owner can finetune open-source models using a wide variety of tools. For example, the node owner can finetune an LLM using personal chat histories so that the finetuned LLM can mimic his own speaking style. He can also finetune an LLM to focus it on a specific knowledge domain to reduce hallucinations and improve answer quality for questions in that domain. A finetuned LLM can guarantee to output JSON text that matches a pre-determined schema for use with external tools. Besides LLMs, the node owner could finetune Stable Diffusion models with her own photos to generate images that look like her. 3 Embedding model. The GaiaNet node needs to manage a body of public or proprietary knowledge for the AI agent. It is a key feature that enables the agent to specialize and outperform much larger models in a specific domain. The embedding models are specially trained LLMs that turns input sentences into a vector representation, instead of generating completions. Since the embedding models are trained from LLMs, they can “embed” the “meaning” of the sentences into the vectors so that similar sentences are located close together in the high dimensional space occupied by those vectors. With the embedding model, a GaiaNet node can ingest a body of text, images, PDFs, web links, audio and video files, and generate a collection of embedding vectors based on their contents. The embedding model also turns user questions and conversations into vectors, which allows the GaiaNet node to quickly identify contents in its knowledge base that are relevant to the current conversation. 4 Vector database. The embedding vectors that form GaiaNet node’s knowledge base are stored on the node itself for optimal performance and maximum privacy. The GaiaNet node includes a Qdrant vector database. 5 Custom prompts. Besides finetuning and knowledge arguments, the easiest way to customize an LLM for new applications is simply to prompt it. Like humans, LLMs are remarkable one-shot learners. You can simply give it an example of how to accomplish a task, and it will learn and do similar tasks on its own. Prompt engineering is a practical field to research and develop such prompts. Furthermore, effective prompts could be highly dependent on the model in use. A prompt that works well for a large model, such as Mixtral 8x22b, is probably not going to work well for a small model like Mistral 7b. The GaiaNet node can support several different prompts that are dynamically chosen and used in applications. For example, The system_prompt is a general introduction to the agent task the node is supposed to perform. It often contains a persona to help the LLM respond with the right tone. For example, the system_prompt for a college teaching assistant could be: “You are a teaching assistant for UC Berkeley’s computer science 101 class. Please explain concepts and answer questions in detail. Do not answer any question that is not related to math or computer science.” The rag_prompt is a prefix prompt to be dynamically inserted in front of knowledge base search results in an RAG chat. It could be something like this: “Please answer the question based on facts and opinions in the context below. Do not make anything that is not in the context. ---------” The LLM community has developed many useful prompts for different application use cases. GaiaNet node allows you to easily manage and experiment with them. Through the our developer SDK, GaiaNet owners and operators could customize the logic of dynamic prompt generation in their own way. For example, a GaiaNet node could perform a Google search for any user question, and add the search results into the prompt as context. 6 Function calls and tool use. The LLM not only is great at generating human language, but also excels at generating machine instructions. Through finetuning and prompt engineering, we could get some LLMs to consistently generate structured JSON objects or computer code in many language tasks, such as summarizing and extracting key elements from a paragraph of text. The GaiaNet node allows you to specify the output format of the generated text. You can give it a grammar specification file to enforce that responses will always conform to a pre-defined JSON schema. Once the LLM returns a structured JSON response, the agent typically need to pass the JSON to a tool that performs the task and comes back with an answer. For example, the user question might be. What is the weather like in Singapore? The LLM generates the following JSON response. {\"tool\":\"get_current_weather\", \"location\":\"Singapore\",\"unit\":\"celsius\"} The GaiaNet node must know what is the tool associated with get_current_weather and then invoke it. GaiaNet node owners and operators can configure any number of external tools by mapping a tool name with a web service endpoint. In the above example, the get_current_weather tool might be associated with a web service that takes this JSON data. The GaiaNet node sends the JSON to the web service endpoint via HTTPS POST and receives an answer. 42 It then optionally feeds the answer to the LLM to generate a human language answer. The current weather in Singapore is 42C. Through the GaiaNet node SDK, developers are not limited to using web services. They can write plugins to process LLM responses locally on the node. For example, the LLM might return Python code, which can be executed locally in a sandbox and for the GaiaNet node to perform a complex operation. 7 The API server. All GaiaNet nodes must have the same API for questions and answers. That allows front-end applications to work with, and potentially be load-balanced to any GaiaNet node. We choose to support the OpenAI API specification, which enables GaiaNet nodes to become drop-in replacements for OpenAI API endpoints for a large ecosystem of applications. The API server runs securely and cross-platform on the WasmEdge runtime. It ties together all the other components in the GaiaNet node. It receives user requests, generates an embedding from the request, searches the vector database, adds search results to the prompt context, generates an LLM response, and then optionally uses the response to perform function calling. The API server also provides a web-based chatbot UI for users to chat with the RAG-enhanced finetuned LLM on the node.","s":"GaiaNet node","u":"/1.0.0/litepaper","h":"#gaianet-node","p":619},{"i":629,"t":"While each GaiaNet node is already a powerful AI agent capable of answering complex questions and performing actions, individual nodes are not suitable for providing public services. There are several important reasons. For the public consumers and users, it is very hard to judge the trustworthiness of individual GaiaNet nodes. Harmful misinformation could be spread by malicious node operators. For GaiaNet node owners and operators, there is no economic incentive to provide such services to the public, which could be very costly to run. The AI agent servers have very different scaling characteristics than traditional internet application servers. When the agent is processing a user request, it typically takes up all the computing resources on the hardware. Instead of using software to scale concurrent users on a single server, the challenge of GaiaNet is to scale to many different identical nodes for a large application. Those challenges have given rise to the GaiaNet domain, which forms the basis of the GaiaNet web3 network. A GaiaNet domain is a collection of GaiaNet nodes available under a single Internet domain name. The domain operator decides which GaiaNet nodes can be registered under the domain and makes the node services available to the public. For example, a GaiaNet domain might be a Computer Science teaching assistant for UC Berkeley. The domain could provide services through https://cs101.gaianet.berkeley.edu. The domain operator needs to do the following. Verify and admit individual nodes to be registered under the domain. Those nodes must all meet requirements, such as the LLM, knowledge base, and prompts, set by the domain operator to ensure service quality. The node registration on a domain could be done via a whitelist or blacklist. It is up to the domain operator. Monitor each node’s performance at real time and remove inactive ones. Promotes the “teaching assistant” chatbot apps to the target audience. Set the price for the API services. Load balance between active nodes. Getting paid by users. Pay nodes for their services. Each GaiaNet node has an unique node ID in the form of an ETH address. The private key associated with the ETH address is stored on the node. Once a node is successfully registered with a domain, it is entitled to receive payments from both service revenue and network awards from the domain. The domain could send payments directly to the node's ETH address. Or, the domain could provide a mechanism for a node operator to register multiple nodes under a single Metamask address, such as signing a challenge phrase using the node private keys. In that case, the node operator will receive aggregated payments in his Metamask account for all associated nodes. Each GaiaNet domain has an associated smart contract that is used for escrow payments. It is similar to OpenAI’s credit payment model, where users purchase credits first, and then consume them over time. When the user pays into the smart contract, an access token will be automatically issued to him. He uses this token to make API calls to the domain, which is then load-balanced to random nodes in the domain. As the user consumes those services, his fund in the contract depletes and the access token stops working if he no longer has any balance. The pricing and payment of the API service are determined by the domain operator. It is typically denominated in USD stable coins. The domain operator pays a share of the revenue to node operators who provided the services. The GaiaNet network is a decentralized marketplace of agent services. The funds locked in GaiaNet domain contracts are for a single purpose of consuming API services. It is called Purpose Bound Money. A key aspect of the GaiaNet protocol is that the domain operators are “trust providers” in the ecosystem of decentralized nodes. The protocol network is designed to incentivize the trust of the operators through tokenomics designs such as mining and staking. GaiaNet nodes, domains, users, and developers form a DAO to grow the network and benefit all contributors.","s":"GaiaNet network","u":"/1.0.0/litepaper","h":"#gaianet-network","p":619},{"i":631,"t":"The GaiaNet token is a utility token designed to facilitate transactions, support governance, and foster trust in the network. It serves three primary purposes. As a DAO governance token, holders can participate in setting the rules of the network. As a staking token, holders vouch for domain operators’ trustworthiness. Stakers get a cut from the domain operator’s service revenue. But they could also be slashed if the domain operator misbehave, such as spreading misinformation or providing unreliable services. As a payment token, the GaiaNet token could be deposited into the domain’s escrow contract and be used to pay for services over time. The payment utility of the GaiaNet token is designed to balance the network supply and demand. The value of the GaiaNet token asset is determined at the time when it enters or leaves the escrow smart contract based on real-time exchange rates. Service consumers could lock in savings from the potential appreciation of the token. For example, if a user deposits $100 worth of GaiaNet tokens into the contract, and when the domain and nodes get paid, the token value has gone up to $110, he would have received $110 worth of agent services. Conversely, if the token price drops, the service providers (domains and nodes) now have an opportunity to “mine” the tokens on the cheap. If the $100 initial tokens is only worth $90 now, service providers will get more tokens for each unit of electricity and compute they provide. That incentivizes more nodes to join the network and speculate on a later rise in token value. An exercise: OpenAI is projected to reach $5 billion in ARR in 2024. Assume that most enterprise customers pay quarterly, that is $1.25 billion of circulation market cap in addition to OpenAI’s current enterprise value if they were to issue a payment token. The overall AI services market size is projected to reach $2 trillion in a few years. That translates to $500 billion market cap for a payment utility token alone.","s":"GaiaNet token","u":"/1.0.0/litepaper","h":"#gaianet-token","p":619},{"i":633,"t":"GaiaNet is a developer platform to create your agent services. We provide tools for you to do these. Tools to generate finetuning datasets and perform finetuning on CPU and GPU machines. Tools to ingest documents and create vector embeddings for the knowledge base. Rust-based SDK to dynamically generate and manage prompts. Rust-based SDK to extend the agent’s capability for invoking tools and software on the node. For developers who do not wish to operate nodes, we are building a marketplace for finetuned models knowledge bases and datasets function-calling plugins All those components are blockchain-based assets represented by NFTs. A node operator could purchase NFTs for the components it wishes to use, and share service revenue with the component developers. That enables diverse and cashflow-generating assets to be issued from the GaiaNet ecosystem.","s":"Component marketplace for AI assets","u":"/1.0.0/litepaper","h":"#component-marketplace-for-ai-assets","p":619},{"i":635,"t":"GaiaNet provides open-source tools for individuals and teams to create agent services using their proprietary knowledge and skills. Developers could create finetuned LLMs, knowledge collections, and plugins for the agent, and issue assets based on those components. The GaiaNet protocol makes those nodes discoverable and accessible through GaiaNet domains.","s":"Conclusion","u":"/1.0.0/litepaper","h":"#conclusion","p":619},{"i":637,"t":"In this section, we will discuss how to create a vector collection snapshot from a PDF file. First, we will parse the unstructured PDF file to a structured markdown file. Then, we will follow the steps from Knowledge base from a markdown file to create embedding for your PDF files.","s":"Knowledge base from a PDF file","u":"/1.0.0/creator-guide/knowledge/pdf","h":"","p":636},{"i":640,"t":"LlamaParse is a tool to parse files for optimal RAG. You will need a LlamaCloud key from https://cloud.llamaindex.ai. First, install the dependencies. we are assuming that you already have Node.JS 20+ installed. git clone https://github.com/alabulei1/llamaparse-integration.git cd llamaparse-integration npm install llamaindex npm install dotenv Then, edit the .env file to set up the PDF file path and LlamaCloud Key. In this case, you don't need to care about the LLM-related settings. After that, run the following command line to parse your pdf into a markdown file. npx tsx transMd.ts The output markdown file will be located in this folder named output.md by default. You can change the path in the .env file.","s":"Tool #1: LlamaParse","u":"/1.0.0/creator-guide/knowledge/pdf","h":"#tool-1-llamaparse","p":636},{"i":642,"t":"GPTPDF is an open-source tool using GPT-4o to parse PDF into markdown. You will need an OpenAI key here. First, install the gptpdf software. pip install gptpdf Then, enter the Python environment. python Next, use the following command to parse your pdf. from gptpdf import parse_pdf api_key = 'Your OpenAI API Key' content, image_paths = parse_pdf(Your_Pdf_Path, api_key=api_key) print(content) The output markdown files called output.md will be located in your root directory.","s":"Tool #2: GPTPDF","u":"/1.0.0/creator-guide/knowledge/pdf","h":"#tool-2-gptpdf","p":636},{"i":644,"t":"Please follow the tutorial Knowledge base from a markdown file to convert your markdown file to a snapshot of embeddings that can be imported into a GaiaNet node.","s":"Create embeddings from the markdown files","u":"/1.0.0/creator-guide/knowledge/pdf","h":"#create-embeddings-from-the-markdown-files","p":636},{"i":646,"t":"After installing the GaiaNet software, you can use the gaianet CLI to manage the node. The following are the CLI options.","s":"GaiaNet CLI options","u":"/1.0.0/node-guide/cli-options","h":"","p":645},{"i":648,"t":"You can use gaianet --help to check all the available CLI options. gaianet --help ## Output Usage: gaianet {config|init|run|stop|OPTIONS} Subcommands: config Update the configuration. init Initialize the GaiaNet node. run|start Start the GaiaNet node. stop Stop the GaiaNet node. Options: --help Show this help message","s":"help","u":"/1.0.0/node-guide/cli-options","h":"#help","p":645},{"i":650,"t":"You can use gaianet --version to check your GaiaNet version. gaianet --version","s":"version","u":"/1.0.0/node-guide/cli-options","h":"#version","p":645},{"i":652,"t":"The gaianet init command initializes the node according to the $HOME/gaianet/config.json file. You can use some of our pre-set configurations. gaianet init will init the default node. It's an RAG application with Gaianet knowledge. gaianet init --config mua will init a node with the MUA project knowledge. gaianet init --base will init a node in an alternative directory. You can also use gaianet init url_your_config_json to init your customized settings for the node. You can customize your node using the Gaianet node link. If you're familiar with the Gaianet config.json, you can create your own manually. See an example here. gaianet init --config https://raw.githubusercontent.com/GaiaNet-AI/node-configs/main/pure-llama-3-8b/config.json","s":"init","u":"/1.0.0/node-guide/cli-options","h":"#init","p":645},{"i":654,"t":"The gaianet start is to start running the node. Use gaianet start to start the node according to the $HOME/gaianet/config.json file. Use gaianet start --base $HOME/gaianet-2.alt to start the node according to the $HOME/gaianet-2/config.json file. Use gaianet start --local-only to start the node for local use according to the $HOME/gaianet/config.json file.","s":"start","u":"/1.0.0/node-guide/cli-options","h":"#start","p":645},{"i":656,"t":"The gaianet stop is to stop the running node. Use gaianet stop to stop running the node. Use gaianet stop --force to force stop the GaiaNet node. Use gaianet stop --base $HOME/gaianet-2.alt to stop the node according to the $HOME/gaianet-2/config.json file.","s":"stop","u":"/1.0.0/node-guide/cli-options","h":"#stop","p":645},{"i":658,"t":"The gaianet config can update the key fields defined in the config.json file. gaianet config --help will list all the available arguments gaianet config --chat-url will change the download link of the chat model. gaianet config --prompt-template