base on Ship RAG based LLM web apps in seconds. <div align="center">
<p>
<a align="center" href="" target="_blank">
<img
width="1280"
src="https://user-images.githubusercontent.com/44926076/278813325-e545319a-4652-43a7-b02b-45ec877bcfdc.png"
>
</a>
</p>
<br>
[questions](https://github.com/safevideo/autollm/discussions/categories/q-a) | [feature requests](https://github.com/safevideo/autollm/discussions/categories/feature-requests)
<br>
[![version](https://badge.fury.io/py/autollm.svg)](https://badge.fury.io/py/autollm)
<a href="https://pepy.tech/project/autollm"><img src="https://pepy.tech/badge/autollm" alt="total autollm downloads"></a>
[![license](https://img.shields.io/pypi/l/autollm)](LICENSE)
[![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/safevideo/autollm/blob/main/examples/quickstart.ipynb)
</div>
## 🤔 why autollm?
**Simplify. Unify. Amplify.**
| Feature | AutoLLM | LangChain | LlamaIndex | LiteLLM |
| -------------------------------- | :-----: | :-------: | :--------: | :-----: |
| **100+ LLMs** | ✅ | ✅ | ✅ | ✅ |
| **Unified API** | ✅ | ❌ | ❌ | ✅ |
| **20+ Vector Databases** | ✅ | ✅ | ✅ | ❌ |
| **Cost Calculation (100+ LLMs)** | ✅ | ❌ | ❌ | ✅ |
| **1-Line RAG LLM Engine** | ✅ | ❌ | ❌ | ❌ |
| **1-Line FastAPI** | ✅ | ❌ | ❌ | ❌ |
______________________________________________________________________
## 📦 installation
easily install **autollm** package with pip in [**Python>=3.8**](https://www.python.org/downloads/) environment.
```bash
pip install autollm
```
for built-in data readers (github, pdf, docx, ipynb, epub, mbox, websites..), install with:
```bash
pip install autollm[readers]
```
______________________________________________________________________
## 🎯 quickstart
### tutorials
- **video tutorials**:
- [Make RAG with API Just in a few Seconds!!!](https://www.youtube.com/watch?v=sgKpBMGC6M0&list=LL&index=2)
- [Autollm automagically create llm apps in seconds](https://www.youtube.com/watch?v=HZik9309wQc&list=LL&index=3)
- [AutoLLM: Create RAG Based LLM Web Apps in SECONDS!](https://www.youtube.com/watch?v=kPaiZe_qD34)
- [AutoLLM: Ship RAG based LLM Apps and API in Seconds](https://www.youtube.com/watch?v=iTGbwD-sSxM)
- [🚀 AutoLLM: Unlock the Power of 100+ Language Models! Step-by-Step Tutorial](https://www.youtube.com/watch?v=Dh9pIWO1VJw)
- **blog posts**:
- [Introduction to AutoLLM](https://abrahimzaman360.medium.com/introduction-to-autollm-c8cd31be2a5f)
- **colab notebooks**:
- quickstart: [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/safevideo/autollm/blob/main/examples/quickstart.ipynb)
### create a query engine in seconds
```python
>>> from autollm import AutoQueryEngine, read_files_as_documents
>>> documents = read_files_as_documents(input_dir="path/to/documents")
>>> query_engine = AutoQueryEngine.from_defaults(documents)
>>> response = query_engine.query(
... "Why did SafeVideo AI develop this project?"
... )
>>> response.response
"Because they wanted to deploy rag based llm apis in no time!"
```
<details>
<summary>👉 advanced usage </summary>
```python
>>> from autollm import AutoQueryEngine
>>> query_engine = AutoQueryEngine.from_defaults(
... documents=documents,
... llm_model="gpt-3.5-turbo",
... llm_max_tokens="256",
... llm_temperature="0.1",
... system_prompt='...',
... query_wrapper_prompt='...',
... enable_cost_calculator=True,
... embed_model="huggingface/BAAI/bge-large-zh",
... chunk_size=512,
... chunk_overlap=64,
... context_window=4096,
... similarity_top_k=3,
... response_mode="compact",
... structured_answer_filtering=False,
... vector_store_type="LanceDBVectorStore",
... lancedb_uri="./lancedb",
... lancedb_table_name="vectors",
... exist_ok=True,
... overwrite_existing=False,
... )
>>> response = query_engine.query("Who is SafeVideo AI?")
>>> print(response.response)
"A startup that provides self hosted AI API's for companies!"
```
</details>
### convert it to a FastAPI app in 1-line
```python
>>> import uvicorn
>>> from autollm import AutoFastAPI
>>> app = AutoFastAPI.from_query_engine(query_engine)
>>> uvicorn.run(app, host="0.0.0.0", port=8000)
INFO: Started server process [12345]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://http://0.0.0.0:8000/
```
<details>
<summary>👉 advanced usage </summary>
```python
>>> from autollm import AutoFastAPI
>>> app = AutoFastAPI.from_query_engine(
... query_engine,
... api_title='...',
... api_description='...',
... api_version='...',
... api_term_of_service='...',
)
>>> uvicorn.run(app, host="0.0.0.0", port=8000)
INFO: Started server process [12345]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://http://0.0.0.0:8000/
```
</details>
______________________________________________________________________
## 🌟 features
### supports [100+ LLMs](https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json)
```python
>>> from autollm import AutoQueryEngine
>>> os.environ["HUGGINGFACE_API_KEY"] = "huggingface_api_key"
>>> llm_model = "huggingface/WizardLM/WizardCoder-Python-34B-V1.0"
>>> llm_api_base = "https://my-endpoint.huggingface.cloud"
>>> AutoQueryEngine.from_defaults(
... documents='...',
... llm_model=llm_model,
... llm_api_base=llm_api_base,
... )
```
<details>
<summary>👉 more llms:</summary>
- huggingface - ollama example:
```python
>>> from autollm import AutoQueryEngine
>>> llm_model = "ollama/llama2"
>>> llm_api_base = "http://localhost:11434"
>>> AutoQueryEngine.from_defaults(
... documents='...',
... llm_model=llm_model,
... llm_api_base=llm_api_base,
... )
```
- microsoft azure - openai example:
```python
>>> from autollm import AutoQueryEngine
>>> os.environ["AZURE_API_KEY"] = ""
>>> os.environ["AZURE_API_BASE"] = ""
>>> os.environ["AZURE_API_VERSION"] = ""
>>> llm_model = "azure/<your_deployment_name>")
>>> AutoQueryEngine.from_defaults(
... documents='...',
... llm_model=llm_model
... )
```
- google - vertexai example:
```python
>>> from autollm import AutoQueryEngine
>>> os.environ["VERTEXAI_PROJECT"] = "hardy-device-38811" # Your Project ID`
>>> os.environ["VERTEXAI_LOCATION"] = "us-central1" # Your Location
>>> llm_model = "text-bison@001"
>>> AutoQueryEngine.from_defaults(
... documents='...',
... llm_model=llm_model
... )
```
- aws bedrock - claude v2 example:
```python
>>> from autollm import AutoQueryEngine
>>> os.environ["AWS_ACCESS_KEY_ID"] = ""
>>> os.environ["AWS_SECRET_ACCESS_KEY"] = ""
>>> os.environ["AWS_REGION_NAME"] = ""
>>> llm_model = "anthropic.claude-v2"
>>> AutoQueryEngine.from_defaults(
... documents='...',
... llm_model=llm_model
... )
```
</details>
### supports [20+ VectorDBs](https://docs.llamaindex.ai/en/stable/module_guides/storing/vector_stores.html#vector-store-options-feature-support)
🌟**Pro Tip**: `autollm` defaults to `lancedb` as the vector store:
it's setup-free, serverless, and 100x more cost-effective!
<details>
<summary>👉 more vectordbs:</summary>
- QdrantVectorStore example:
```python
>>> from autollm import AutoQueryEngine
>>> import qdrant_client
>>> vector_store_type = "QdrantVectorStore"
>>> client = qdrant_client.QdrantClient(
... url="http://<host>:<port>",
... api_key="<qdrant-api-key>"
... )
>>> collection_name = "quickstart"
>>> AutoQueryEngine.from_defaults(
... documents='...',
... vector_store_type=vector_store_type,
... client=client,
... collection_name=collection_name,
... )
```
</details>
### automated cost calculation for [100+ LLMs](https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json)
```python
>>> from autollm import AutoServiceContext
>>> service_context = AutoServiceContext(enable_cost_calculation=True)
# Example verbose output after query
Embedding Token Usage: 7
LLM Prompt Token Usage: 1482
LLM Completion Token Usage: 47
LLM Total Token Cost: $0.002317
```
### create FastAPI App in 1-Line
<details>
<summary>👉 example</summary>
```python
>>> from autollm import AutoFastAPI
>>> app = AutoFastAPI.from_config(config_path, env_path)
```
Here, `config` and `env` should be replaced by your configuration and environment file paths.
After creating your FastAPI app, run the following command in your terminal to get it up and running:
```bash
uvicorn main:app
```
</details>
______________________________________________________________________
## 🔄 migration from llama-index
switching from Llama-Index? We've got you covered.
<details>
<summary>👉 easy migration </summary>
```python
>>> from llama_index import StorageContext, ServiceContext, VectorStoreIndex
>>> from llama_index.vectorstores import LanceDBVectorStore
>>> from autollm import AutoQueryEngine
>>> vector_store = LanceDBVectorStore(uri="./.lancedb")
>>> storage_context = StorageContext.from_defaults(vector_store=vector_store)
>>> service_context = ServiceContext.from_defaults()
>>> index = VectorStoreIndex.from_documents(
documents=documents,
storage_context=storage_contex,
service_context=service_context,
)
>>> query_engine = AutoQueryEngine.from_instances(index)
```
</details>
## ❓ FAQ
**Q: Can I use this for commercial projects?**
A: Yes, AutoLLM is licensed under GNU Affero General Public License (AGPL 3.0),
which allows for commercial use under certain conditions. [Contact](#contact) us for more information.
______________________________________________________________________
## roadmap
our roadmap outlines upcoming features and integrations to make autollm the most extensible and powerful base package for large language model applications.
- [ ] **1-line [Gradio](https://www.gradio.app/) app creation and deployment**
- [ ] **Budget based email notification**
- [ ] **Automated LLM evaluation**
- [ ] **Add more quickstart apps on pdf-chat, documentation-chat, academic-paper-analysis, patent-analysis and more!**
______________________________________________________________________
## 📜 license
autollm is available under the [GNU Affero General Public License (AGPL 3.0)](LICENSE).
______________________________________________________________________
## 📞 contact
for more information, support, or questions, please contact:
- **Email**: [
[email protected]](mailto:
[email protected])
- **Website**: [SafeVideo](https://safevideo.ai/)
- **LinkedIn**: [SafeVideo AI](https://www.linkedin.com/company/safevideo/)
______________________________________________________________________
## 🏆 contributing
**love autollm? star the repo or contribute and help us make it even better!** see our [contributing guidelines](CONTRIBUTING.md) for more information.
<p align="center">
<a href="https://github.com/safevideo/autollm/graphs/contributors">
<img src="https://contrib.rocks/image?repo=safevideo/autollm" />
</a>
</p>
______________________________________________________________________
<div align="center">
<b>follow us for more!</b>
<br>
<a href="https://www.linkedin.com/company/safevideo/">
<img
src="https://user-images.githubusercontent.com/44926076/278822352-30e06f9b-1915-4aed-8081-6796432daa7a.png"
height="32px"
/>
</a>
<a href="https://huggingface.co/safevideo">
<img
src="https://user-images.githubusercontent.com/34196005/278877706-ed074c9c-0938-48a1-98e8-39a322faf01d.png"
height="32px"
/>
</a>
<a href="https://twitter.com/safevideo_ai">
<img
src="https://user-images.githubusercontent.com/34196005/278877049-141925a9-aa1b-4730-829e-74f6d08ee8ca.png"
height="32px"
/>
</a>
</div>
", Assign "at most 3 tags" to the expected json: {"id":"4454","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"