.. _llm: LLM === We support many known LLM models and providers used to analyze the web pages and extract the information requested by the user. Models can be split in **Chat Models** and **Embedding Models** (the latter are mainly used for Retrieval Augmented Generation RAG). These models are specified inside the graph configuration dictionary and can be used interchangeably, for example by defining a different model for llm and embeddings. - **Local Models**: These models are hosted on the local machine and can be used without any API key. - **API-based Models**: These models are hosted on the cloud and require an API key to access them (eg. OpenAI, Groq, etc). .. note:: If the emebedding model is not specified, the library will use the default one for that LLM, if available. Local Models ------------ Currently, local models are supported through Ollama integration. Ollama is a provider of LLM models which can be downloaded from here `Ollama `_. Let's say we want to use **llama3** as chat model and **nomic-embed-text** as embedding model. We first need to pull them from ollama using: .. code-block:: bash ollama pull llama3 ollama pull nomic-embed-text Then we can use them in the graph configuration as follows: .. code-block:: python graph_config = { "llm": { "model": "llama3", "temperature": 0.0, "format": "json", }, "embeddings": { "model": "nomic-embed-text", }, } You can also specify the **base_url** parameter to specify the models endpoint. By default, it is set to http://localhost:11434. This is useful if you are running Ollama on a Docker container or on a different machine. If you want to host Ollama in a Docker container, you can use the following command: .. code-block:: bash docker-compose up -d docker exec -it ollama ollama pull llama3 API-based Models ---------------- OpenAI ^^^^^^ You can get the API key from `here `_. .. code-block:: python graph_config = { "llm": { "api_key": "OPENAI_API_KEY", "model": "gpt-3.5-turbo", }, } If you want to use text to speech models, you can specify the `tts_model` parameter: .. code-block:: python graph_config = { "llm": { "api_key": "OPENAI_API_KEY", "model": "gpt-3.5-turbo", "temperature": 0.7, }, "tts_model": { "api_key": "OPENAI_API_KEY", "model": "tts-1", "voice": "alloy" }, } Gemini ^^^^^^ You can get the API key from `here `_. **Note**: some countries are not supported and therefore it won't be possible to request an API key. A possible workaround is to use a VPN or run the library on Colab. .. code-block:: python graph_config = { "llm": { "api_key": "GEMINI_API_KEY", "model": "gemini-pro" }, } Groq ^^^^ You can get the API key from `here `_. Groq doesn't support embedding models, so in the following example we are using Ollama one. .. code-block:: python graph_config = { "llm": { "model": "groq/gemma-7b-it", "api_key": "GROQ_API_KEY", "temperature": 0 }, "embeddings": { "model": "ollama/nomic-embed-text", }, } Azure ^^^^^ We can also pass a model instance for the chat model and the embedding model. For Azure, a possible configuration would be: .. code-block:: python llm_model_instance = AzureChatOpenAI( openai_api_version="AZURE_OPENAI_API_VERSION", azure_deployment="AZURE_OPENAI_CHAT_DEPLOYMENT_NAME" ) embedder_model_instance = AzureOpenAIEmbeddings( azure_deployment="AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT_NAME", openai_api_version="AZURE_OPENAI_API_VERSION", ) # Supposing model_tokens are 100K model_tokens_count = 100000 graph_config = { "llm": { "model_instance": llm_model_instance, "model_tokens": model_tokens_count, }, "embeddings": { "model_instance": embedder_model_instance } } Hugging Face Hub ^^^^^^^^^^^^^^^^ We can also pass a model instance for the chat model and the embedding model. For Hugging Face, a possible configuration would be: .. code-block:: python llm_model_instance = HuggingFaceEndpoint( repo_id="mistralai/Mistral-7B-Instruct-v0.2", max_length=128, temperature=0.5, token="HUGGINGFACEHUB_API_TOKEN" ) embedder_model_instance = HuggingFaceInferenceAPIEmbeddings( api_key="HUGGINGFACEHUB_API_TOKEN", model_name="sentence-transformers/all-MiniLM-l6-v2" ) graph_config = { "llm": { "model_instance": llm_model_instance }, "embeddings": { "model_instance": embedder_model_instance } } Anthropic ^^^^^^^^^ We can also pass a model instance for the chat model and the embedding model. For Anthropic, a possible configuration would be: .. code-block:: python embedder_model_instance = HuggingFaceInferenceAPIEmbeddings( api_key="HUGGINGFACEHUB_API_TOKEN", model_name="sentence-transformers/all-MiniLM-l6-v2" ) graph_config = { "llm": { "api_key": "ANTHROPIC_API_KEY", "model": "claude-3-haiku-20240307", "max_tokens": 4000 }, "embeddings": { "model_instance": embedder_model_instance } } Other LLM models ^^^^^^^^^^^^^^^^ We can also pass a model instance for the chat model and the embedding model through the **model_instance** parameter. This feature enables you to utilize a Langchain model instance. You will discover the model you require within the provided list: - `chat model list `_ - `embedding model list `_. For instance, consider **chat model** Moonshot. We can integrate it in the following manner: .. code-block:: python from langchain_community.chat_models.moonshot import MoonshotChat # The configuration parameters are contingent upon the specific model you select llm_instance_config = { "model": "moonshot-v1-8k", "base_url": "https://api.moonshot.cn/v1", "moonshot_api_key": "MOONSHOT_API_KEY", } llm_model_instance = MoonshotChat(**llm_instance_config) graph_config = { "llm": { "model_instance": llm_model_instance, "model_tokens": 5000 }, }