Skip to main content

A simple RAG API - build a question and answer interface to your own content in minutes

Project description

Fraggle

A simple RAG (Retrieval-Augmented Generation) API - build a question and answer interface to your own content in minutes.

Fraggle is the spiritual successor to microllama, modernized with:

  • Provider-agnostic LLM support via any-llm
  • Modern LangChain (0.3+)
  • Support for OpenAI and Anthropic models
  • Simple deployment and usage

Installation

pip install fraggle

Quick Start

  1. Prepare your content in a source.json file:
[
  {
    "content": "Fraggle is a RAG API for building Q&A interfaces.",
    "title": "What is Fraggle",
    "url": "https://example.com/docs"
  },
  {
    "content": "You can use OpenAI or Anthropic models with Fraggle.",
    "title": "Supported Models"
  }
]
  1. Set your API key:
export OPENAI_API_KEY="your-key-here"
# or
export ANTHROPIC_API_KEY="your-key-here"
  1. Create the search index:
fraggle index
  1. Start the server:
fraggle serve
  1. Query your content:
curl -X POST http://localhost:8000/api/ask \
  -H "Content-Type: application/json" \
  -d '{"question": "What is Fraggle?"}'

Configuration

Configure Fraggle with environment variables:

Variable Default Description
SOURCE_JSON_PATH source.json Path to your content JSON file
INDEX_PATH faiss_index Path to store/load the FAISS index
LLM_PROVIDER openai LLM provider: openai or anthropic
LLM_MODEL gpt-4o-mini Model ID (e.g., gpt-4o, claude-3-5-sonnet-20241022)
EMBEDDINGS_PROVIDER openai Embeddings provider
EMBEDDINGS_MODEL text-embedding-3-small Embeddings model
CHUNK_SIZE 1000 Text chunk size for indexing
CHUNK_OVERLAP 100 Overlap between chunks
K_CONTEXT_DOCS 4 Number of documents to retrieve
UVICORN_HOST 0.0.0.0 Host to bind the server to
UVICORN_PORT 8000 Port to bind the server to

Using Anthropic Claude

export ANTHROPIC_API_KEY="your-key-here"
export LLM_PROVIDER="anthropic"
export LLM_MODEL="claude-3-5-sonnet-20241022"
fraggle serve

CLI Commands

fraggle serve

Start the API server. Automatically serves the frontend at / if the frontend/ directory exists.

fraggle index

Create a FAISS index from your source documents.

Options:

  • --source: Path to source JSON file (default: source.json)
  • --output: Path to save the index (default: faiss_index)

fraggle make-front-end

Generate a simple HTML frontend for your Q&A interface.

Options:

  • --output: Directory for frontend files (default: frontend)

fraggle make-dockerfile

Generate a Dockerfile for containerized deployment.

API Endpoints

POST /api/ask

Non-streaming question answering.

Request:

{
  "question": "What is Fraggle?"
}

Response:

{
  "answer": "Fraggle is a RAG API for building Q&A interfaces to your content."
}

POST /api/stream

Streaming question answering (Server-Sent Events).

Request:

{
  "question": "What is Fraggle?"
}

Response: SSE stream of text chunks.

Deployment

Docker

fraggle make-dockerfile
docker build -t fraggle .
docker run -p 8000:8000 -e OPENAI_API_KEY=your-key fraggle

Pre-building the Index

For faster startup, create the index at build time by uncommenting the RUN fraggle index line in the Dockerfile.

Development

# Clone the repo
git clone https://github.com/tomdyson/fraggle.git
cd fraggle

# Install with uv
uv sync

# Run in development mode
uv run fraggle serve

Comparison with microllama

Fraggle improves on microllama by:

  • Provider-agnostic: Use any LLM via any-llm
  • Modern dependencies: LangChain 0.3+
  • Better naming: Focus on RAG, not LLMs
  • Same simple API and deployment story

License

MIT

Publishing a New Version

Fraggle uses GitHub Actions to automatically publish to PyPI when you push a version tag:

# 1. Update the version in pyproject.toml
# 2. Commit and tag the release
git add pyproject.toml
git commit -m "Bump version to 0.1.x"
git tag v0.1.x
git push && git push --tags

The GitHub Actions workflow will automatically build and publish to PyPI.

First-time setup: Configure PyPI Trusted Publishing at https://pypi.org/manage/account/publishing/ with:

  • PyPI Project Name: fraggle
  • Owner: tomdyson
  • Repository: fraggle
  • Workflow: publish.yml
  • Environment: pypi

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fraggle-0.1.2.tar.gz (96.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fraggle-0.1.2-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

Details for the file fraggle-0.1.2.tar.gz.

File metadata

  • Download URL: fraggle-0.1.2.tar.gz
  • Upload date:
  • Size: 96.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fraggle-0.1.2.tar.gz
Algorithm Hash digest
SHA256 0e97bced7564d00cbebaf484a521704bde9afb9057376c01b7f566a60d93fa7f
MD5 069235d2c8e90ab29e37527d27988191
BLAKE2b-256 5d85b55d209e86633a883abe4df6043882e9ccbe1a90b4391b18b468950f21eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for fraggle-0.1.2.tar.gz:

Publisher: publish.yml on tomdyson/fraggle

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fraggle-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: fraggle-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 7.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fraggle-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5294327f031163fb98d2b1e9c7793b3f4e4db7ac05214b4f00f0a551f87e8816
MD5 c8ff49f68a3df948f295026249204d29
BLAKE2b-256 6f656d4386795e90c7e46112a9d06717f0728f27409dff35aef613f155cf23c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for fraggle-0.1.2-py3-none-any.whl:

Publisher: publish.yml on tomdyson/fraggle

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page