forked from AI_team/Philosophy-RAG-demo
🎨 Add .env only for API keys
This commit is contained in:
parent
26b374cf41
commit
74dd3b6947
3
.gitignore
vendored
3
.gitignore
vendored
@ -167,6 +167,3 @@ chainlit.md
|
|||||||
|
|
||||||
# Chroma DB
|
# Chroma DB
|
||||||
.chroma_db/
|
.chroma_db/
|
||||||
|
|
||||||
# Settings
|
|
||||||
config.yaml
|
|
||||||
14
README.md
14
README.md
@ -14,6 +14,7 @@ A generic Retrieval Augmented Generation (RAG) demo from Sogeti Netherlands buil
|
|||||||
- [Local LLM (optional)](#local-llm-optional)
|
- [Local LLM (optional)](#local-llm-optional)
|
||||||
- [Running generic RAG demo](#running-generic-rag-demo)
|
- [Running generic RAG demo](#running-generic-rag-demo)
|
||||||
- [config.yaml file](#configyaml-file)
|
- [config.yaml file](#configyaml-file)
|
||||||
|
- [.env file](#env-file)
|
||||||
- [Chainlit starters](#chainlit-starters)
|
- [Chainlit starters](#chainlit-starters)
|
||||||
- [Dev details](#dev-details)
|
- [Dev details](#dev-details)
|
||||||
- [Linting](#linting)
|
- [Linting](#linting)
|
||||||
@ -96,11 +97,11 @@ python generic_rag/app.py -p data # will work and parsers all pdf files in ./da
|
|||||||
python generic_rag/app.py --help # will work and prints command line options
|
python generic_rag/app.py --help # will work and prints command line options
|
||||||
```
|
```
|
||||||
|
|
||||||
Please configure your `config.yaml` file with your cloud provider (backend) of choice. See the `config.example.yaml` file as a starting point that holds all possible options.
|
Please configure your `config.yaml` and `.env` file with your cloud provider (backend) of choice. See the sections below for more details.
|
||||||
|
|
||||||
### config.yaml file
|
### config.yaml file
|
||||||
|
|
||||||
A config.yaml file is required to specify your API endpoints, local backends, and environment variables. Use the provided config.yaml.example as a starting point. Update the file according to your backend settings and project requirements.
|
A config.yaml file is required to specify your API endpoints and local backends. Use the provided `config.yaml.example` as a starting point. Update the file according to your backend settings and project requirements.
|
||||||
|
|
||||||
Key configuration points include:
|
Key configuration points include:
|
||||||
- Chat Backend: Choose among azure, openai, google_vertex, aws, or local.
|
- Chat Backend: Choose among azure, openai, google_vertex, aws, or local.
|
||||||
@ -116,6 +117,15 @@ For more information on configuring Langchain endpoints and models, please see:
|
|||||||
|
|
||||||
> for local models we currently use Ollama
|
> for local models we currently use Ollama
|
||||||
|
|
||||||
|
### .env file
|
||||||
|
|
||||||
|
Set the API keys for your chosen cloud provider (backend). This ensures that your application can authenticate and interact with the services.
|
||||||
|
|
||||||
|
```text
|
||||||
|
AZURE_OPENAI_API_KEY=your_azure_api_key
|
||||||
|
OPENAI_API_KEY=your_openai_api_key
|
||||||
|
```
|
||||||
|
|
||||||
### Chainlit starters
|
### Chainlit starters
|
||||||
|
|
||||||
Chainlit suggestions (starters) can be set with the `CHAINLIT_STARTERS` environment variable.
|
Chainlit suggestions (starters) can be set with the `CHAINLIT_STARTERS` environment variable.
|
||||||
|
|||||||
@ -8,16 +8,14 @@ use_conditional_graph: false # Use a conditional RAG model with historical chat
|
|||||||
# --- Provider Specific Settings ---
|
# --- Provider Specific Settings ---
|
||||||
|
|
||||||
azure:
|
azure:
|
||||||
openai_api_key: "your_openai_api_key"
|
|
||||||
llm_endpoint: "https://example.openai.azure.com"
|
llm_endpoint: "https://example.openai.azure.com"
|
||||||
llm_deployment_name: "gpt-4o-mini"
|
llm_deployment_name: "gpt-4o-mini"
|
||||||
llm_api_version: "2025-01-01-preview"
|
llm_api_version: "2025-01-01-preview"
|
||||||
emb_endpoint: "https://example.openai.azure.com" # Can be same as LLM endpoint
|
emb_endpoint: "https://example.openai.azure.com"
|
||||||
emb_deployment_name: "text-embedding-3-large"
|
emb_deployment_name: "text-embedding-3-large"
|
||||||
emb_api_version: "2023-05-15"
|
emb_api_version: "2023-05-15"
|
||||||
|
|
||||||
openai:
|
openai:
|
||||||
openai_api_key: "your_openai_api_key"
|
|
||||||
chat_model: "gpt-4o-mini"
|
chat_model: "gpt-4o-mini"
|
||||||
emb_model: "text-embedding-3-large"
|
emb_model: "text-embedding-3-large"
|
||||||
|
|
||||||
@ -31,15 +29,14 @@ aws:
|
|||||||
chat_model: "amazon.titan-llm-v1"
|
chat_model: "amazon.titan-llm-v1"
|
||||||
emb_model: "amazon.titan-embed-text-v1"
|
emb_model: "amazon.titan-embed-text-v1"
|
||||||
region: "us-east-1"
|
region: "us-east-1"
|
||||||
credentials: "PATH_TO_YOUR_CREDENTIALS_FILE.json"
|
|
||||||
|
|
||||||
local: # Settings for local models (e.g., Ollama)
|
local: # Settings for local models (e.g., Ollama)
|
||||||
chat_model: "llama3.1:8b"
|
chat_model: "llama3.1:8b"
|
||||||
emb_model: "llama3.1:8b"
|
emb_model: "llama3.1:8b"
|
||||||
|
|
||||||
huggingface: # Settings specific to HuggingFace embedding backend
|
huggingface:
|
||||||
chat_model: "meta-llama/Llama-2-7b-chat-hf"
|
chat_model: "meta-llama/Llama-2-7b-chat-hf"
|
||||||
emb_model: "sentence-transformers/paraphrase-MiniLM-L12-v2"
|
emb_model: "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
|
||||||
|
|
||||||
# --- Data Processing Settings ---
|
# --- Data Processing Settings ---
|
||||||
|
|
||||||
@ -61,4 +58,4 @@ web:
|
|||||||
|
|
||||||
chroma_db:
|
chroma_db:
|
||||||
location: "/app/data/vector_database" # Override default DB path (default: '.chroma_db')
|
location: "/app/data/vector_database" # Override default DB path (default: '.chroma_db')
|
||||||
reset: True # Reset the database on startup? (default: false)
|
reset: False # Reset the database on startup? (default: false)
|
||||||
@ -1,4 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
|
|
||||||
from langchain_core.embeddings import Embeddings
|
from langchain_core.embeddings import Embeddings
|
||||||
from langchain_core.language_models.chat_models import BaseChatModel
|
from langchain_core.language_models.chat_models import BaseChatModel
|
||||||
@ -39,19 +40,26 @@ def get_chat_model(settings: AppSettings) -> BaseChatModel:
|
|||||||
raise ValueError(
|
raise ValueError(
|
||||||
"Azure configuration requires 'llm_endpoint', 'llm_deployment_name', and 'llm_api_version'."
|
"Azure configuration requires 'llm_endpoint', 'llm_deployment_name', and 'llm_api_version'."
|
||||||
)
|
)
|
||||||
|
if "AZURE_OPENAI_API_KEY" not in os.environ:
|
||||||
|
raise ValueError(
|
||||||
|
"The environment variable 'AZURE_OPENAI_API_KEY' is missing. Please set the variable in your '.env' file before running the script."
|
||||||
|
)
|
||||||
return AzureChatOpenAI(
|
return AzureChatOpenAI(
|
||||||
azure_endpoint=settings.azure.llm_endpoint,
|
azure_endpoint=settings.azure.llm_endpoint,
|
||||||
azure_deployment=settings.azure.llm_deployment_name,
|
azure_deployment=settings.azure.llm_deployment_name,
|
||||||
openai_api_version=settings.azure.llm_api_version,
|
openai_api_version=settings.azure.llm_api_version,
|
||||||
openai_api_key=settings.azure.openai_api_key.get_secret_value() if settings.azure.openai_api_key else None,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if settings.chat_backend == ChatBackend.openai:
|
if settings.chat_backend == ChatBackend.openai:
|
||||||
if not settings.openai:
|
if not settings.openai:
|
||||||
raise ValueError("OpenAI chat backend selected, but 'openai' configuration section is missing.")
|
raise ValueError("OpenAI chat backend selected, but 'openai' configuration section is missing.")
|
||||||
if not settings.openai.api_key or not settings.openai.chat_model:
|
if not settings.openai.chat_model:
|
||||||
raise ValueError("OpenAI configuration requires 'api_key' and 'chat_model'.")
|
raise ValueError("OpenAI configuration requires 'chat_model'.")
|
||||||
return ChatOpenAI(model=settings.openai.chat_model, openai_api_key=settings.openai.api_key.get_secret_value())
|
if "OPENAI_API_KEY" not in os.environ:
|
||||||
|
raise ValueError(
|
||||||
|
"The environment variable 'OPENAI_API_KEY' is missing. Please set the variable in your '.env' file before running the script."
|
||||||
|
)
|
||||||
|
return ChatOpenAI(model=settings.openai.chat_model)
|
||||||
|
|
||||||
if settings.chat_backend == ChatBackend.google_vertex:
|
if settings.chat_backend == ChatBackend.google_vertex:
|
||||||
if not settings.google_vertex:
|
if not settings.google_vertex:
|
||||||
@ -63,7 +71,7 @@ def get_chat_model(settings: AppSettings) -> BaseChatModel:
|
|||||||
or not settings.google_vertex.project_id
|
or not settings.google_vertex.project_id
|
||||||
or not settings.google_vertex.location
|
or not settings.google_vertex.location
|
||||||
):
|
):
|
||||||
raise ValueError("Google Vertex configuration requires 'chat_model' and 'project_id'.")
|
raise ValueError("Google Vertex configuration requires 'chat_model', 'project_id' and 'location'.")
|
||||||
return ChatVertexAI(
|
return ChatVertexAI(
|
||||||
model_name=settings.google_vertex.chat_model,
|
model_name=settings.google_vertex.chat_model,
|
||||||
project=settings.google_vertex.project_id,
|
project=settings.google_vertex.project_id,
|
||||||
@ -74,10 +82,10 @@ def get_chat_model(settings: AppSettings) -> BaseChatModel:
|
|||||||
if not settings.aws:
|
if not settings.aws:
|
||||||
raise ValueError("AWS Bedrock chat backend selected, but 'aws' configuration section is missing.")
|
raise ValueError("AWS Bedrock chat backend selected, but 'aws' configuration section is missing.")
|
||||||
if not settings.aws.chat_model or not settings.aws.region_name:
|
if not settings.aws.chat_model or not settings.aws.region_name:
|
||||||
raise ValueError("AWS Bedrock configuration requires 'chat_model' and 'region_name'")
|
raise ValueError("AWS Bedrock configuration requires 'chat_model' and 'region'")
|
||||||
return ChatBedrock(
|
return ChatBedrock(
|
||||||
model_id=settings.aws.chat_model,
|
model_id=settings.aws.chat_model,
|
||||||
region_name=settings.aws.region_name,
|
region_name=settings.aws.region,
|
||||||
)
|
)
|
||||||
|
|
||||||
if settings.chat_backend == ChatBackend.local:
|
if settings.chat_backend == ChatBackend.local:
|
||||||
@ -132,21 +140,26 @@ def get_embedding_model(settings: AppSettings) -> Embeddings:
|
|||||||
raise ValueError(
|
raise ValueError(
|
||||||
"Azure configuration requires 'emb_endpoint', 'emb_deployment_name', and 'emb_api_version'."
|
"Azure configuration requires 'emb_endpoint', 'emb_deployment_name', and 'emb_api_version'."
|
||||||
)
|
)
|
||||||
|
if "AZURE_OPENAI_API_KEY" not in os.environ:
|
||||||
|
raise ValueError(
|
||||||
|
"The environment variable 'AZURE_OPENAI_API_KEY' is missing. Please set the variable in your '.env' file before running the script."
|
||||||
|
)
|
||||||
return AzureOpenAIEmbeddings(
|
return AzureOpenAIEmbeddings(
|
||||||
azure_endpoint=settings.azure.emb_endpoint,
|
azure_endpoint=settings.azure.emb_endpoint,
|
||||||
azure_deployment=settings.azure.emb_deployment_name,
|
azure_deployment=settings.azure.emb_deployment_name,
|
||||||
openai_api_version=settings.azure.emb_api_version,
|
openai_api_version=settings.azure.emb_api_version,
|
||||||
openai_api_key=settings.azure.openai_api_key.get_secret_value() if settings.azure.openai_api_key else None,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if settings.emb_backend == EmbeddingBackend.openai:
|
if settings.emb_backend == EmbeddingBackend.openai:
|
||||||
if not settings.openai:
|
if not settings.openai:
|
||||||
raise ValueError("OpenAI embedding backend selected, but 'openai' configuration section is missing.")
|
raise ValueError("OpenAI embedding backend selected, but 'openai' configuration section is missing.")
|
||||||
if not settings.openai.api_key:
|
if not settings.openai.emb_model:
|
||||||
raise ValueError("OpenAI configuration requires 'api_key'.")
|
raise ValueError("OpenAI configuration requires 'emb_model'.")
|
||||||
return OpenAIEmbeddings(
|
if "OPENAI_API_KEY" not in os.environ:
|
||||||
model=settings.openai.emb_model, openai_api_key=settings.openai.api_key.get_secret_value()
|
raise ValueError(
|
||||||
|
"The environment variable 'OPENAI_API_KEY' is missing. Please set the variable in your '.env' file before running the script."
|
||||||
)
|
)
|
||||||
|
return OpenAIEmbeddings(model=settings.openai.emb_model)
|
||||||
|
|
||||||
if settings.emb_backend == EmbeddingBackend.google_vertex:
|
if settings.emb_backend == EmbeddingBackend.google_vertex:
|
||||||
if not settings.google_vertex:
|
if not settings.google_vertex:
|
||||||
@ -168,9 +181,9 @@ def get_embedding_model(settings: AppSettings) -> Embeddings:
|
|||||||
if settings.emb_backend == EmbeddingBackend.aws:
|
if settings.emb_backend == EmbeddingBackend.aws:
|
||||||
if not settings.aws:
|
if not settings.aws:
|
||||||
raise ValueError("AWS Bedrock embedding backend selected, but 'aws' configuration section is missing.")
|
raise ValueError("AWS Bedrock embedding backend selected, but 'aws' configuration section is missing.")
|
||||||
if not settings.aws.emb_model or not settings.aws.region_name:
|
if not settings.aws.emb_model or not settings.aws.region:
|
||||||
raise ValueError("AWS Bedrock configuration requires 'emb_model' and 'region_name'")
|
raise ValueError("AWS Bedrock configuration requires 'emb_model' and 'region'")
|
||||||
return BedrockEmbeddings(model_id=settings.aws.emb_model, region_name=settings.aws.region_name)
|
return BedrockEmbeddings(model_id=settings.aws.emb_model, region_name=settings.aws.region)
|
||||||
|
|
||||||
if settings.emb_backend == EmbeddingBackend.local:
|
if settings.emb_backend == EmbeddingBackend.local:
|
||||||
if not settings.local:
|
if not settings.local:
|
||||||
|
|||||||
@ -6,7 +6,6 @@ from pydantic import (
|
|||||||
BaseModel,
|
BaseModel,
|
||||||
Field,
|
Field,
|
||||||
ValidationError,
|
ValidationError,
|
||||||
SecretStr,
|
|
||||||
)
|
)
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@ -38,7 +37,6 @@ class EmbeddingBackend(str, Enum):
|
|||||||
class AzureSettings(BaseModel):
|
class AzureSettings(BaseModel):
|
||||||
"""Azure specific settings."""
|
"""Azure specific settings."""
|
||||||
|
|
||||||
openai_api_key: Optional[SecretStr] = None
|
|
||||||
llm_endpoint: Optional[str] = None
|
llm_endpoint: Optional[str] = None
|
||||||
llm_deployment_name: Optional[str] = None
|
llm_deployment_name: Optional[str] = None
|
||||||
llm_api_version: Optional[str] = None
|
llm_api_version: Optional[str] = None
|
||||||
@ -50,7 +48,6 @@ class AzureSettings(BaseModel):
|
|||||||
class OpenAISettings(BaseModel):
|
class OpenAISettings(BaseModel):
|
||||||
"""OpenAI specific settings."""
|
"""OpenAI specific settings."""
|
||||||
|
|
||||||
api_key: Optional[SecretStr] = None
|
|
||||||
chat_model: Optional[str] = None
|
chat_model: Optional[str] = None
|
||||||
emb_model: Optional[str] = None
|
emb_model: Optional[str] = None
|
||||||
|
|
||||||
@ -84,7 +81,6 @@ class HuggingFaceSettings(BaseModel):
|
|||||||
|
|
||||||
chat_model: Optional[str] = None
|
chat_model: Optional[str] = None
|
||||||
emb_model: Optional[str] = None
|
emb_model: Optional[str] = None
|
||||||
api_token: Optional[SecretStr] = None
|
|
||||||
|
|
||||||
|
|
||||||
class PdfSettings(BaseModel):
|
class PdfSettings(BaseModel):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user