Axora 🌌
A local-first LLM orchestration library with native support for Hugging Face, PEFT/LoRA, QLoRA — without hiding the model and giving advanced users the full control.
Axora is a thin orchestration layer — not an abstraction barrier.
Why Axora?
Use Axora if you:
- Want full control over your model (no hidden layers)
- Prefer explicit agent logic over auto-magic chains
- Are working locally with Hugging Face / quantized models
Avoid Axora if you:
- Want plug-and-play integrations (use LangChain)
- Need production-ready pipelines out of the box
Note:
⚠️ Status
- Early development — APIs may change
- Currently focusing on agentic systems (v0.1.5)
⚠️ LM Studio Support
- Inference only
- Agent integration coming soon
🤝 Contributing
- Contributions welcome
- Please avoid low-quality / spam PRs
Features
- Local-First: Built for running LLMs on your own hardware efficiently.
- Native PEFT/QLoRA: Seamless integration with Hugging Face's PEFT for efficient model loading.
- Persistent Memory: Vector-based memory using FAISS with automatic text embedding (SLM).
- Strict ReAct Agents: Deterministic agent loops using JSON-based tool calls.
- Model Transparency: Easy access to the underlying Hugging Face model and tokenizer.
Installation
Using python
pip install Axora
Using Anaconda/Miniforge
conda activate < ENV NAME >
pip install Axora
(Note: Requires Python 3.12+)
Quick Start
#setup imports and optional vector DB
from Axora import Agent, AxoraHFModel, VectorDB, Tool
#Optional
db = VectorDB()
db.add("Information to be added into the vector db to be checked, it will automatically searched up by the model when generating responses")
model = AxoraHFModel(
model_name ="unsloth/Llama-3.2-3B-Instruct",
quantization="4bit",
vector_db=db #optional
)
model.generate("What is an apple?")
# OR
model = AxoraLMSModel()
model.generate("What is an apple")
#define functions for the agent
def add(a,b):
"Adds 2 numbers together"
print(f"Adding {a} and {b} via tool call")
return a + b
def subtract(a,b):
"Subtracts b from a"
print(f"Subtracting {b} from {a} via tool call")
return a - b
tools = [
Tool(name="add", func=add, description="Adds two numbers together. Input should be in the format: 'a,b' where a and b are numbers."),
Tool(name="subtract", func=subtract, description="Subtracts b from a. Input should be in the format: 'a,b' where a and b are numbers.")
]
#Setup and run the agent
agent = Agent(
"AddSubtract_Agent",
model,
tools=tools,
description = "An agent for only addition and subtraction tasks."
)
agent.run("what is 1+1?")
# MULTI AGENT setup
# The coordinator model routes tasks between agents based on their descriptions.
def add(a,b):
"Adds 2 numbers together"
print(f"Adding {a} and {b} via tool call")
return a + b
def subtract(a,b):
"Subtracts b from a"
print(f"Subtracting {b} from {a} via tool call")
return a - b
def multiply(a,b):
"Multiplies 2 numbers together"
print(f"Multiplying {a} and {b} via tool call")
return a * b
def divide(a,b):
"Divides a by b"
print(f"Dividing {a} by {b} via tool call")
if b == 0:
return "Error: Division by zero"
return a / b
tools1 = [
Tool(name="add", func=add, description="Adds two numbers together. Input should be in the format: 'a,b' where a and b are numbers."),
Tool(name="subtract", func=subtract, description="Subtracts b from a. Input should be in the format: 'a,b' where a and b are numbers.")
]
tools2 = [
Tool(name="multiply", func=multiply, description="Multiplies two numbers together. Input should be in the format: 'a,b' where a and b are numbers."),
Tool(name="divide", func=divide, description="Divides a by b. Input should be in the format: 'a,b' where a and b are numbers."),
]
agent1 = Agent(
"AddSubtract_Agent",
model,
tools=tools1,
description = "An agent for only addition and subtraction tasks."
)
agent2 = Agent(
"MultiplyDivide_Agent",
model,
tools=tools2,
description = "An agent only for multiplication and division tasks."
)
#create a multi agent system
MOA = MultiAgent(agents=[agent1,agent2],coordinator_model=model)
response = MOA.run("What is the result of (15 + 5) * (10 - 2)?")
print("Final Response from MultiAgent System: ",response)
Project Structure
Axora/chains/: Agentic workflows and ReAct implementations.Axora/model/: Hugging Face model loading and generation wrappers.Axora/memory/: FAISS-backed persistent vector storage.Axora/tools/: Tool registry and definition system.Axora/experimental/: Experimental features do not use these in production , these will be changed / deleted later on.
Non-goals
This library does not aim to be a full ML framework or replace existing tools like LangChain. It focuses on providing a clean, minimal interface for local-first LLM orchestration.
Notes for devlopers
in order to compile Axora into a python package , please run:
python -m build
Metadata
Release files for Axora 0.1.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| axora-0.1.4.1.tar.gz | 22.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| axora-0.1.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 50.8 kB
Release files / axora-0.1.4.1.tar.gz
| Download URL | axora-0.1.4.1.tar.gz |
|---|---|
| Size | 22.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9167bdcbd6d703fa1c0e3fc60aa8e86a572067462a9134a9463470f4afe56db4
|
|
BLAKE2b-256 checksum How to use checksums |
6b1104ff991923189a5112cd091d7aa60688ea137000c433ddd4589c284b0398
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / axora-0.1.4.1-py3-none-any.whl
| Download URL | axora-0.1.4.1-py3-none-any.whl |
|---|---|
| Size | 28.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
05e24d76a9e9951ae6726acafca2794733f94c4e2c598e2b9d8866f87124e750
|
|
BLAKE2b-256 checksum How to use checksums |
f5dbcae7c5e71c913bc3ef450142c3705c8a5bbd9942e1d9a4bef5460e91fbc2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|