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/
|
||||
|
||||
# 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)
|
||||
- [Running generic RAG demo](#running-generic-rag-demo)
|
||||
- [config.yaml file](#configyaml-file)
|
||||
- [.env file](#env-file)
|
||||
- [Chainlit starters](#chainlit-starters)
|
||||
- [Dev details](#dev-details)
|
||||
- [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
|
||||
```
|
||||
|
||||
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
|
||||
|
||||
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:
|
||||
- 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
|
||||
|
||||
### .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 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 ---
|
||||
|
||||
azure:
|
||||
openai_api_key: "your_openai_api_key"
|
||||
llm_endpoint: "https://example.openai.azure.com"
|
||||
llm_deployment_name: "gpt-4o-mini"
|
||||
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_api_version: "2023-05-15"
|
||||
|
||||
openai:
|
||||
openai_api_key: "your_openai_api_key"
|
||||
chat_model: "gpt-4o-mini"
|
||||
emb_model: "text-embedding-3-large"
|
||||
|
||||
@ -31,15 +29,14 @@ aws:
|
||||
chat_model: "amazon.titan-llm-v1"
|
||||
emb_model: "amazon.titan-embed-text-v1"
|
||||
region: "us-east-1"
|
||||
credentials: "PATH_TO_YOUR_CREDENTIALS_FILE.json"
|
||||
|
||||
local: # Settings for local models (e.g., Ollama)
|
||||
chat_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"
|
||||
emb_model: "sentence-transformers/paraphrase-MiniLM-L12-v2"
|
||||
emb_model: "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
|
||||
|
||||
# --- Data Processing Settings ---
|
||||
|
||||
@ -61,4 +58,4 @@ web:
|
||||
|
||||
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 os
|
||||
|
||||
from langchain_core.embeddings import Embeddings
|
||||
from langchain_core.language_models.chat_models import BaseChatModel
|
||||
@ -39,19 +40,26 @@ def get_chat_model(settings: AppSettings) -> BaseChatModel:
|
||||
raise ValueError(
|
||||
"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(
|
||||
azure_endpoint=settings.azure.llm_endpoint,
|
||||
azure_deployment=settings.azure.llm_deployment_name,
|
||||
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 not settings.openai:
|
||||
raise ValueError("OpenAI chat backend selected, but 'openai' configuration section is missing.")
|
||||
if not settings.openai.api_key or not settings.openai.chat_model:
|
||||
raise ValueError("OpenAI configuration requires 'api_key' and 'chat_model'.")
|
||||
return ChatOpenAI(model=settings.openai.chat_model, openai_api_key=settings.openai.api_key.get_secret_value())
|
||||
if not settings.openai.chat_model:
|
||||
raise ValueError("OpenAI configuration requires 'chat_model'.")
|
||||
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 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.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(
|
||||
model_name=settings.google_vertex.chat_model,
|
||||
project=settings.google_vertex.project_id,
|
||||
@ -74,10 +82,10 @@ def get_chat_model(settings: AppSettings) -> BaseChatModel:
|
||||
if not settings.aws:
|
||||
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:
|
||||
raise ValueError("AWS Bedrock configuration requires 'chat_model' and 'region_name'")
|
||||
raise ValueError("AWS Bedrock configuration requires 'chat_model' and 'region'")
|
||||
return ChatBedrock(
|
||||
model_id=settings.aws.chat_model,
|
||||
region_name=settings.aws.region_name,
|
||||
region_name=settings.aws.region,
|
||||
)
|
||||
|
||||
if settings.chat_backend == ChatBackend.local:
|
||||
@ -132,21 +140,26 @@ def get_embedding_model(settings: AppSettings) -> Embeddings:
|
||||
raise ValueError(
|
||||
"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(
|
||||
azure_endpoint=settings.azure.emb_endpoint,
|
||||
azure_deployment=settings.azure.emb_deployment_name,
|
||||
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 not settings.openai:
|
||||
raise ValueError("OpenAI embedding backend selected, but 'openai' configuration section is missing.")
|
||||
if not settings.openai.api_key:
|
||||
raise ValueError("OpenAI configuration requires 'api_key'.")
|
||||
return OpenAIEmbeddings(
|
||||
model=settings.openai.emb_model, openai_api_key=settings.openai.api_key.get_secret_value()
|
||||
)
|
||||
if not settings.openai.emb_model:
|
||||
raise ValueError("OpenAI configuration requires 'emb_model'.")
|
||||
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 OpenAIEmbeddings(model=settings.openai.emb_model)
|
||||
|
||||
if settings.emb_backend == EmbeddingBackend.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 not settings.aws:
|
||||
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:
|
||||
raise ValueError("AWS Bedrock configuration requires 'emb_model' and 'region_name'")
|
||||
return BedrockEmbeddings(model_id=settings.aws.emb_model, region_name=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'")
|
||||
return BedrockEmbeddings(model_id=settings.aws.emb_model, region_name=settings.aws.region)
|
||||
|
||||
if settings.emb_backend == EmbeddingBackend.local:
|
||||
if not settings.local:
|
||||
|
||||
@ -6,7 +6,6 @@ from pydantic import (
|
||||
BaseModel,
|
||||
Field,
|
||||
ValidationError,
|
||||
SecretStr,
|
||||
)
|
||||
import sys
|
||||
|
||||
@ -38,7 +37,6 @@ class EmbeddingBackend(str, Enum):
|
||||
class AzureSettings(BaseModel):
|
||||
"""Azure specific settings."""
|
||||
|
||||
openai_api_key: Optional[SecretStr] = None
|
||||
llm_endpoint: Optional[str] = None
|
||||
llm_deployment_name: Optional[str] = None
|
||||
llm_api_version: Optional[str] = None
|
||||
@ -50,7 +48,6 @@ class AzureSettings(BaseModel):
|
||||
class OpenAISettings(BaseModel):
|
||||
"""OpenAI specific settings."""
|
||||
|
||||
api_key: Optional[SecretStr] = None
|
||||
chat_model: Optional[str] = None
|
||||
emb_model: Optional[str] = None
|
||||
|
||||
@ -84,7 +81,6 @@ class HuggingFaceSettings(BaseModel):
|
||||
|
||||
chat_model: Optional[str] = None
|
||||
emb_model: Optional[str] = None
|
||||
api_token: Optional[SecretStr] = None
|
||||
|
||||
|
||||
class PdfSettings(BaseModel):
|
||||
|
||||
Loading…
Reference in New Issue
Block a user