LlamaIndex Integration
FraiseQLReader is a LlamaIndex BaseReader that executes GraphQL queries and returns the results as Document objects, making FraiseQL a first-class data source for RAG pipelines and knowledge-base agents.
Installation
Section titled “Installation”pip install "fraiseql[llamaindex]"Basic Usage
Section titled “Basic Usage”import asynciofrom fraiseql.client import FraiseQLClientfrom fraiseql.integrations.llamaindex import FraiseQLReader
async def main() -> None: client = FraiseQLClient( "http://localhost:8080/graphql", auth_token="Bearer eyJ..." ) reader = FraiseQLReader(client=client)
documents = await reader.aload_data( query="{ products { id name description category price } }", text_template="{name}: {description}", metadata_fields=["id", "category", "price"], )
for doc in documents: print(doc.text) # "Widget Pro: The best widget for everyday use" print(doc.metadata) # {"id": "p-123", "category": "tools", "price": 29.99}
asyncio.run(main())Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
query | str | GraphQL query string |
variables | dict | None | Query variables |
text_template | str | None | Python format string for Document.text. Uses field names as keys. If None, the full JSON is used. |
metadata_fields | list[str] | None | Fields to include in Document.metadata. If None, all fields are included. |
With LlamaIndex VectorStore
Section titled “With LlamaIndex VectorStore”Load FraiseQL results into a vector index for semantic search:
from llama_index.core import VectorStoreIndexfrom fraiseql.client import FraiseQLClientfrom fraiseql.integrations.llamaindex import FraiseQLReader
client = FraiseQLClient("http://localhost:8080/graphql")reader = FraiseQLReader(client=client)
# Load product catalog as documentsdocuments = await reader.aload_data( query="{ products { id name description } }", text_template="{name}: {description}",)
# Build vector index for semantic searchindex = VectorStoreIndex.from_documents(documents)query_engine = index.as_query_engine()
response = await query_engine.aquery( "Which products are suitable for outdoor use?")print(response)