Files
wehub-resource-sync 86db9aae8e
Documentation / build (push) Has been cancelled
Documentation / deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:34:55 +08:00

264 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
layout: default
title: Model Catalog
parent: Components
nav_order: 2
description: overview of the major modules and classes of LLMWare
permalink: /components/model_catalog
---
# Model Catalog:
Access all models the same way with easy lookup, regardless of underlying implementation.
- 150+ Models in Catalog with 50+ RAG-optimized BLING, DRAGON and Industry BERT models
- 18 SLIM function-calling small language models for Agent use cases
- Full support for GGUF, HuggingFace, Sentence Transformers and major API-based models
- Easy to extend to add custom models - see examples
Generally, all models can be identified using either the `model_name` or `display_name`, which provides some flexibility
to expose a more "UI friendly" name or an informal short-name for a commonly-used model.
The default model list is implemented in the model_configs.py module, which is then generally accessed in the models.py module through
the `ModelCatalog` class, which also provides the ability to add models of various types, over-write by loading a custom model catalog from json file, and
other useful interfaces into the list of models.
```python
from llmware.models import ModelCatalog
from llmware.prompts import Prompt
# all models accessed through the ModelCatalog
models = ModelCatalog().list_all_models()
# to use any model in the ModelCatalog - "load_model" method and pass the model_name parameter
my_model = ModelCatalog().load_model("llmware/bling-phi-3-gguf")
output = my_model.inference("what is the future of AI?", add_context="Here is the article to read")
# to integrate model into a Prompt
prompter = Prompt().load_model("llmware/bling-tiny-llama-v0")
response = prompter.prompt_main("what is the future of AI?", context="Insert Sources of information")
```
# ADD a Custom GGUF to the ModelCatalog
```python
import time
import re
from llmware.models import ModelCatalog
from llmware.prompts import Prompt
# Step 1 - register new gguf model - we will pick the popular LLama-2-13B-chat-GGUF
ModelCatalog().register_gguf_model(model_name="TheBloke/Llama-2-13B-chat-GGUF-Q2",
gguf_model_repo="TheBloke/Llama-2-13B-chat-GGUF",
gguf_model_file_name="llama-2-13b-chat.Q2_K.gguf",
prompt_wrapper="my_version_inst")
# Step 2- if the prompt_wrapper is a standard, e.g., Meta's <INST>, then no need to do anything else
# -- however, if the model uses a custom prompt wrapper, then we need to define that too
# -- in this case, we are going to create our "own version" of the Meta <INST> wrapper
ModelCatalog().register_new_finetune_wrapper("my_version_inst", main_start="<INST>", llm_start="</INST>")
# Once we have completed these two steps, we are done - and can begin to use the model like any other
prompter = Prompt().load_model("TheBloke/Llama-2-13B-chat-GGUF-Q2")
question_list = ["I am interested in gaining an understanding of the banking industry. What topics should I research?",
"What are some tips for creating a successful business plan?",
"What are the best books to read for a class on American literature?"]
for i, entry in enumerate(question_list):
start_time = time.time()
print("\n")
print(f"query - {i + 1} - {entry}")
response = prompter.prompt_main(entry)
# Print results
time_taken = round(time.time() - start_time, 2)
llm_response = re.sub("[\n\n]", "\n", response['llm_response'])
print(f"llm_response - {i + 1} - {llm_response}")
print(f"time_taken - {i + 1} - {time_taken}")
```
# ADD an Ollama Model
```python
from llmware.models import ModelCatalog
# Step 1 - register your Ollama models in llmware ModelCatalog
# -- these two lines will register: llama2 and mistral models
# -- note: assumes that you have previously cached and installed both of these models with ollama locally
# register llama2
ModelCatalog().register_ollama_model(model_name="llama2",model_type="chat",host="localhost",port=11434)
# register mistral - note: if you are using ollama defaults, then OK to register with ollama model name only
ModelCatalog().register_ollama_model(model_name="mistral")
# optional - confirm that model was registered
my_new_model_card = ModelCatalog().lookup_model_card("llama2")
print("\nupdate: confirming - new ollama model card - ", my_new_model_card)
# Step 2 - start using the Ollama model like any other model in llmware
print("\nupdate: calling ollama llama 2 model ...")
model = ModelCatalog().load_model("llama2")
response = model.inference("why is the sky blue?")
print("update: example #1 - ollama llama 2 response - ", response)
# Tip: if you are loading 'llama2' chat model from Ollama, note that it is already included in
# the llmware model catalog under a different name, "TheBloke/Llama-2-7B-Chat-GGUF"
# the llmware model name maps to the original HuggingFace repository, and is a nod to "TheBloke" who has
# led the popularization of GGUF - and is responsible for creating most of the GGUF model versions.
# --llmware uses the "Q4_K_M" model by default, while Ollama generally prefers "Q4_0"
print("\nupdate: calling Llama-2-7B-Chat-GGUF in llmware catalog ...")
model = ModelCatalog().load_model("TheBloke/Llama-2-7B-Chat-GGUF")
response = model.inference("why is the sky blue?")
print("update: example #1 - [compare] - llmware / Llama-2-7B-Chat-GGUF response - ", response)
# Now, let's try the Ollama Mistral model with a context passage
model2 = ModelCatalog().load_model("mistral")
context_passage= ("NASAs rover Perseverance has gathered data confirming the existence of ancient lake "
"sediments deposited by water that once filled a giant basin on Mars called Jerezo Crater, "
"according to a study published on Friday. The findings from ground-penetrating radar "
"observations conducted by the robotic rover substantiate previous orbital imagery and "
"other data leading scientists to theorize that portions of Mars were once covered in water "
"and may have harbored microbial life. The research, led by teams from the University of "
"California at Los Angeles (UCLA) and the University of Oslo, was published in the "
"journal Science Advances. It was based on subsurface scans taken by the car-sized, six-wheeled "
"rover over several months of 2022 as it made its way across the Martian surface from the "
"crater floor onto an adjacent expanse of braided, sedimentary-like features resembling, "
"from orbit, the river deltas found on Earth.")
response = model2.inference("What are the top 3 points?", add_context=context_passage)
print("\nupdate: calling ollama mistral model ...")
print("update: example #2 - ollama mistral response - ", response)
# Step 3 - using the ollama discovery API - optional
discovery = model2.discover_models()
print("\nupdate: example #3 - checking ollama model manifest list: ", discovery)
if len(discovery) > 0:
# note: assumes tht you have at least one model registered in ollama -otherwise, may throw error
for i, models in enumerate(discovery["models"]):
print("ollama models: ", i, models)
```
# Add a LM Studio Model
```python
from llmware.models import ModelCatalog
from llmware.prompts import Prompt
# one step process: add the open chat model to the Model Registry
# key params:
# model_name = "my_open_chat_model1"
# api_base = uri_path to the proposed endpoint
# prompt_wrapper = alpaca | <INST> | chat_ml | hf_chat | human_bot
# <INST> -> Llama2-Chat
# hf_chat -> Zephyr-Mistral
# chat_ml -> OpenHermes - Mistral
# human_bot -> Dragon models
# model_type = "chat" (alternative: "completion")
ModelCatalog().register_open_chat_model("my_open_chat_model1",
api_base="http://localhost:1234/v1",
prompt_wrapper="<INST>",
model_type="chat")
# once registered, you can invoke like any other model in llmware
prompter = Prompt().load_model("my_open_chat_model1")
response = prompter.prompt_main("What is the future of AI?")
# you can (optionally) register multiple open chat models with different api_base and model attributes
ModelCatalog().register_open_chat_model("my_open_chat_model2",
api_base="http://localhost:5678/v1",
prompt_wrapper="hf_chat",
model_type="chat")
```
Need help or have questions?
============================
Check out the [llmware videos](https://www.youtube.com/@llmware) and [GitHub repository](https://github.com/llmware-ai/llmware).
Reach out to us on [GitHub Discussions](https://github.com/llmware-ai/llmware/discussions).
# About the project
`llmware` is &copy; 2023-{{ "now" | date: "%Y" }} by [AI Bloks](https://www.aibloks.com/home).
## Contributing
Please first discuss any change you want to make publicly, for example on GitHub via raising an [issue](https://github.com/llmware-ai/llmware/issues) or starting a [new discussion](https://github.com/llmware-ai/llmware/discussions).
You can also write an email or start a discussion on our Discrod channel.
Read more about becoming a contributor in the [GitHub repo](https://github.com/llmware-ai/llmware/blob/main/CONTRIBUTING.md).
## Code of conduct
We welcome everyone into the ``llmware`` community.
[View our Code of Conduct](https://github.com/llmware-ai/llmware/blob/main/CODE_OF_CONDUCT.md) in our GitHub repository.
## ``llmware`` and [AI Bloks](https://www.aibloks.com/home)
``llmware`` is an open source project from [AI Bloks](https://www.aibloks.com/home) - the company behind ``llmware``.
The company offers a Software as a Service (SaaS) Retrieval Augmented Generation (RAG) service.
[AI Bloks](https://www.aibloks.com/home) was founded by [Namee Oberst](https://www.linkedin.com/in/nameeoberst/) and [Darren Oberst](https://www.linkedin.com/in/darren-oberst-34a4b54/) in Oktober 2022.
## License
`llmware` is distributed by an [Apache-2.0 license](https://github.com/llmware-ai/llmware/blob/main/LICENSE).
## Thank you to the contributors of ``llmware``!
<ul class="list-style-none">
{% for contributor in site.github.contributors %}
<li class="d-inline-block mr-1">
<a href="{{ contributor.html_url }}">
<img src="{{ contributor.avatar_url }}" width="32" height="32" alt="{{ contributor.login }}">
</a>
</li>
{% endfor %}
</ul>
---
<ul class="list-style-none">
<li class="d-inline-block mr-1">
<a href="https://discord.gg/MhZn5Nc39h"><span><i class="fa-brands fa-discord"></i></span></a>
</li>
<li class="d-inline-block mr-1">
<a href="https://www.youtube.com/@llmware"><span><i class="fa-brands fa-youtube"></i></span></a>
</li>
<li class="d-inline-block mr-1">
<a href="https://huggingface.co/llmware"><span> <img src="https://huggingface.co/front/assets/huggingface_logo-noborder.svg" alt="Hugging Face" class="hugging-face-logo"/> </span></a>
</li>
<li class="d-inline-block mr-1">
<a href="https://www.linkedin.com/company/aibloks/"><span><i class="fa-brands fa-linkedin"></i></span></a>
</li>
<li class="d-inline-block mr-1">
<a href="https://twitter.com/AiBloks"><span><i class="fa-brands fa-square-x-twitter"></i></span></a>
</li>
<li class="d-inline-block mr-1">
<a href="https://www.instagram.com/aibloks/"><span><i class="fa-brands fa-instagram"></i></span></a>
</li>
</ul>
---