Skip to content

Commit 6745685

Browse files
authored
Ai config (#358)
* Add assumerole
1 parent d385c55 commit 6745685

16 files changed

Lines changed: 799 additions & 81 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ Visit [http://localhost:8888](http://localhost:8888)
116116
[http://localhost:8025](http://localhost:8025)
117117
You can change the smtp configuration if required however all emails with domain **example.com** will still go to mailhog.
118118
119+
For chatbot LLM provider configuration, see [setup instructions](docs/setup.md#chatbot-llm-configuration).
120+
119121
### Vagrant
120122
121123
This option allows you to run crAPI within a virtual machine, thus isolated from

deploy/docker/docker-compose.yml

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,11 +172,36 @@ services:
172172
- API_USER=admin@example.com
173173
- API_PASSWORD=Admin!123
174174
- OPENAPI_SPEC=/app/resources/crapi-openapi-spec.json
175-
- DEFAULT_MODEL=gpt-4o-mini
175+
- CHATBOT_LLM_PROVIDER=${CHATBOT_LLM_PROVIDER:-openai}
176+
- CHATBOT_LLM_MODEL=${CHATBOT_LLM_MODEL:-}
177+
- CHATBOT_EMBEDDINGS_MODEL=${CHATBOT_EMBEDDINGS_MODEL:-}
178+
- CHATBOT_EMBEDDINGS_DIMENSIONS=${CHATBOT_EMBEDDINGS_DIMENSIONS:-1536}
179+
- CHATBOT_OPENAI_API_KEY=${CHATBOT_OPENAI_API_KEY:-}
180+
- CHATBOT_OPENAI_BASE_URL=${CHATBOT_OPENAI_BASE_URL:-}
181+
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
182+
- AZURE_OPENAI_API_KEY=${AZURE_OPENAI_API_KEY:-}
183+
- AZURE_AD_TOKEN=${AZURE_AD_TOKEN:-}
184+
- AZURE_OPENAI_ENDPOINT=${AZURE_OPENAI_ENDPOINT:-}
185+
- AZURE_OPENAI_API_VERSION=${AZURE_OPENAI_API_VERSION:-2024-02-15-preview}
186+
- AZURE_OPENAI_CHAT_DEPLOYMENT=${AZURE_OPENAI_CHAT_DEPLOYMENT:-}
187+
- AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT=${AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT:-}
188+
- GROQ_API_KEY=${GROQ_API_KEY:-}
189+
- MISTRAL_API_KEY=${MISTRAL_API_KEY:-}
190+
- COHERE_API_KEY=${COHERE_API_KEY:-}
191+
- AWS_BEARER_TOKEN_BEDROCK=${AWS_BEARER_TOKEN_BEDROCK:-}
192+
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
193+
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
194+
- AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN:-}
195+
- AWS_REGION=${AWS_REGION:-}
196+
- AWS_ASSUME_ROLE_ARN=${AWS_ASSUME_ROLE_ARN:-}
197+
- AWS_EXTERNAL_ID=${AWS_EXTERNAL_ID:-}
198+
- AWS_ROLE_SESSION_NAME=${AWS_ROLE_SESSION_NAME:-crapi-chatbot-session}
199+
- GOOGLE_APPLICATION_CREDENTIALS=${GOOGLE_APPLICATION_CREDENTIALS:-}
200+
- VERTEX_PROJECT=${VERTEX_PROJECT:-}
201+
- VERTEX_LOCATION=${VERTEX_LOCATION:-}
176202
- MAX_CONTENT_LENGTH=50000
177203
- CHROMA_HOST=chromadb
178204
- CHROMA_PORT=8000
179-
# - CHATBOT_OPENAI_API_KEY=
180205
depends_on:
181206
mongodb:
182207
condition: service_healthy

deploy/helm/templates/chatbot/config.yaml

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,33 @@ data:
2020
MONGO_DB_USER: {{ .Values.mongodb.config.mongoUser }}
2121
MONGO_DB_PASSWORD: {{ .Values.mongodb.config.mongoPassword }}
2222
MONGO_DB_NAME: {{ .Values.mongodb.config.mongoDbName }}
23-
CHATBOT_OPENAI_API_KEY: {{ .Values.openAIApiKey }}
24-
DEFAULT_MODEL: {{ .Values.chatbot.config.defaultModel | quote }}
23+
CHATBOT_OPENAI_API_KEY: {{ .Values.chatbotOpenaiApiKey | default .Values.openAIApiKey | quote }}
24+
CHATBOT_OPENAI_BASE_URL: {{ .Values.chatbotOpenaiBaseUrl | quote }}
25+
CHATBOT_LLM_PROVIDER: {{ .Values.chatbotLlmProvider | quote }}
26+
CHATBOT_LLM_MODEL: {{ .Values.chatbotLlmModel | quote }}
27+
CHATBOT_EMBEDDINGS_MODEL: {{ .Values.chatbotEmbeddingsModel | quote }}
28+
CHATBOT_EMBEDDINGS_DIMENSIONS: {{ .Values.chatbotEmbeddingsDimensions | quote }}
29+
ANTHROPIC_API_KEY: {{ .Values.anthropicApiKey | quote }}
30+
AZURE_OPENAI_API_KEY: {{ .Values.azureOpenaiApiKey | quote }}
31+
AZURE_AD_TOKEN: {{ .Values.azureAdToken | quote }}
32+
AZURE_OPENAI_ENDPOINT: {{ .Values.azureOpenaiEndpoint | quote }}
33+
AZURE_OPENAI_API_VERSION: {{ .Values.azureOpenaiApiVersion | quote }}
34+
AZURE_OPENAI_CHAT_DEPLOYMENT: {{ .Values.azureOpenaiChatDeployment | quote }}
35+
AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT: {{ .Values.azureOpenaiEmbeddingsDeployment | quote }}
36+
GROQ_API_KEY: {{ .Values.groqApiKey | quote }}
37+
MISTRAL_API_KEY: {{ .Values.mistralApiKey | quote }}
38+
COHERE_API_KEY: {{ .Values.cohereApiKey | quote }}
39+
AWS_BEARER_TOKEN_BEDROCK: {{ .Values.awsBearerTokenBedrock | quote }}
40+
AWS_ACCESS_KEY_ID: {{ .Values.awsAccessKeyId | quote }}
41+
AWS_SECRET_ACCESS_KEY: {{ .Values.awsSecretAccessKey | quote }}
42+
AWS_SESSION_TOKEN: {{ .Values.awsSessionToken | quote }}
43+
AWS_REGION: {{ .Values.awsRegion | quote }}
44+
AWS_ASSUME_ROLE_ARN: {{ .Values.awsAssumeRoleArn | quote }}
45+
AWS_EXTERNAL_ID: {{ .Values.awsExternalId | quote }}
46+
AWS_ROLE_SESSION_NAME: {{ .Values.awsRoleSessionName | quote }}
47+
GOOGLE_APPLICATION_CREDENTIALS: {{ .Values.googleApplicationCredentials | quote }}
48+
VERTEX_PROJECT: {{ .Values.vertexProject | quote }}
49+
VERTEX_LOCATION: {{ .Values.vertexLocation | quote }}
2550
MAX_CONTENT_LENGTH: {{ .Values.chatbot.config.maxContentLength | quote }}
2651
CHROMA_HOST: {{ .Values.chromadb.service.name }}
2752
CHROMA_PORT: {{ .Values.chromadb.port | quote }}

deploy/helm/values.yaml

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,57 @@ apiGatewayServiceInstall: true
1111
apiGatewayPassword:
1212
tlsEnabled: false
1313
jwtExpiration: 604800000
14-
openAIApiKey: ""
1514
logLevel: INFO
1615

16+
# Chatbot LLM Configuration
17+
chatbotLlmProvider: openai
18+
chatbotLlmModel: ""
19+
chatbotEmbeddingsModel: ""
20+
chatbotEmbeddingsDimensions: 1536
21+
22+
# OpenAI API Key
23+
chatbotOpenaiApiKey: ""
24+
openAIApiKey: "" # for backward compatibility
25+
26+
# OpenAI Base URL (for DeepSeek or other OpenAI-compatible APIs)
27+
chatbotOpenaiBaseUrl: ""
28+
29+
# Anthropic API Key
30+
anthropicApiKey: ""
31+
32+
# Azure configuration
33+
azureOpenaiApiKey: ""
34+
azureAdToken: ""
35+
azureOpenaiEndpoint: ""
36+
azureOpenaiApiVersion: 2024-02-15-preview
37+
azureOpenaiChatDeployment: ""
38+
azureOpenaiEmbeddingsDeployment: ""
39+
40+
# Groq API Key
41+
groqApiKey: ""
42+
43+
# Mistral API Key
44+
mistralApiKey: ""
45+
46+
# Cohere API Key
47+
cohereApiKey: ""
48+
49+
# AWS Bedrock configuration
50+
awsBearerTokenBedrock: ""
51+
awsAccessKeyId: ""
52+
awsSecretAccessKey: ""
53+
awsSessionToken: ""
54+
awsRegion: ""
55+
# AWS IAM Assume Role configuration (optional - use instead of static credentials)
56+
awsAssumeRoleArn: ""
57+
awsExternalId: ""
58+
awsRoleSessionName: "crapi-chatbot-session"
59+
60+
# Google Vertex AI configuration
61+
googleApplicationCredentials: ""
62+
vertexProject: ""
63+
vertexLocation: ""
64+
1765
waitForK8sResources:
1866
enabled: True
1967
image: groundnuty/k8s-wait-for:v2.0
@@ -152,7 +200,6 @@ chatbot:
152200
postgresDbDriver: postgres
153201
mongoDbDriver: mongodb
154202
secretKey: crapi
155-
defaultModel: gpt-4o-mini
156203
maxContentLength: 50000
157204
chromaPersistDirectory: /app/vectorstore
158205
apiUser: admin@example.com

deploy/k8s/base/chatbot/config.yaml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,51 @@ metadata:
44
name: crapi-chatbot-configmap
55
labels:
66
app: crapi-chatbot
7+
data:
8+
SERVER_PORT: "5002"
9+
IDENTITY_SERVICE: "crapi-identity:8080"
10+
WEB_SERVICE: "crapi-web"
11+
TLS_ENABLED: "false"
12+
DB_HOST: "postgresdb"
13+
DB_USER: "admin"
14+
DB_PASSWORD: "crapisecretpassword"
15+
DB_NAME: "crapi"
16+
DB_PORT: "5432"
17+
MONGO_DB_HOST: "mongodb"
18+
MONGO_DB_PORT: "27017"
19+
MONGO_DB_USER: "admin"
20+
MONGO_DB_PASSWORD: "crapisecretpassword"
21+
MONGO_DB_NAME: "crapi"
22+
CHATBOT_OPENAI_API_KEY: ""
23+
CHATBOT_OPENAI_BASE_URL: ""
24+
CHATBOT_LLM_PROVIDER: "openai"
25+
CHATBOT_LLM_MODEL: ""
26+
CHATBOT_EMBEDDINGS_MODEL: ""
27+
CHATBOT_EMBEDDINGS_DIMENSIONS: "1536"
28+
ANTHROPIC_API_KEY: ""
29+
AZURE_OPENAI_API_KEY: ""
30+
AZURE_AD_TOKEN: ""
31+
AZURE_OPENAI_ENDPOINT: ""
32+
AZURE_OPENAI_API_VERSION: "2024-02-15-preview"
33+
AZURE_OPENAI_CHAT_DEPLOYMENT: ""
34+
AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT: ""
35+
GROQ_API_KEY: ""
36+
MISTRAL_API_KEY: ""
37+
COHERE_API_KEY: ""
38+
AWS_BEARER_TOKEN_BEDROCK: ""
39+
AWS_ACCESS_KEY_ID: ""
40+
AWS_SECRET_ACCESS_KEY: ""
41+
AWS_SESSION_TOKEN: ""
42+
AWS_REGION: ""
43+
AWS_ASSUME_ROLE_ARN: ""
44+
AWS_EXTERNAL_ID: ""
45+
AWS_ROLE_SESSION_NAME: "crapi-chatbot-session"
46+
GOOGLE_APPLICATION_CREDENTIALS: ""
47+
VERTEX_PROJECT: ""
48+
VERTEX_LOCATION: ""
49+
MAX_CONTENT_LENGTH: "50000"
50+
CHROMA_HOST: "chromadb"
51+
CHROMA_PORT: "8000"
52+
API_USER: "admin@example.com"
53+
API_PASSWORD: "Admin!123"
54+
OPENAPI_SPEC: "/app/resources/crapi-openapi-spec.json"

docs/setup.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,49 @@ You can use prebuilt images generated by our CI workflow by downloading the dock
101101
[http://localhost:8025](http://localhost:8025)
102102
You can change the smtp configuration if required however all emails with domain **example.com** will still go to mailhog.
103103
104+
### Chatbot LLM configuration
105+
106+
The chatbot supports multiple LLM providers. Provider selection and models are set via environment variables. OpenAI and Anthropic keys are set via the API (with env fallback); all other providers use env credentials only.
107+
108+
Core settings:
109+
- `CHATBOT_LLM_PROVIDER`: `openai`, `anthropic`, `azure_openai`, `bedrock`, `vertex`, `groq`, `mistral`, `cohere`
110+
- `CHATBOT_LLM_MODEL`: optional, provider model name. Defaults per provider:
111+
- openai: `gpt-4o-mini`
112+
- anthropic: `claude-sonnet-4-20250514`
113+
- bedrock: `anthropic.claude-3-sonnet-20240229-v1:0`
114+
- vertex: `gemini-1.5-flash`
115+
- groq: `llama-3.3-70b-versatile`
116+
- mistral: `mistral-large-latest`
117+
- cohere: `command-r-plus`
118+
- azure_openai: uses `AZURE_OPENAI_CHAT_DEPLOYMENT`
119+
- `CHATBOT_EMBEDDINGS_MODEL`: optional embeddings model name (used across providers)
120+
- `CHATBOT_EMBEDDINGS_DIMENSIONS`: optional, defaults to `1536`
121+
122+
OpenAI (API, optional env fallback):
123+
- POST `/genai/init` with `{"openai_api_key":"..."}` (per-session)
124+
- `CHATBOT_OPENAI_API_KEY` (optional env fallback)
125+
126+
Anthropic (API, optional env fallback):
127+
- POST `/genai/init` with `{"anthropic_api_key":"..."}` (per-session)
128+
- `ANTHROPIC_API_KEY` (optional env fallback)
129+
130+
Azure OpenAI (env only):
131+
- `AZURE_OPENAI_ENDPOINT`, `AZURE_OPENAI_CHAT_DEPLOYMENT`
132+
- Auth: `AZURE_OPENAI_API_KEY` or `AZURE_AD_TOKEN` (managed identity)
133+
- Optional: `AZURE_OPENAI_API_VERSION`, `AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT`
134+
135+
AWS Bedrock (env only):
136+
- `AWS_REGION` and either:
137+
- `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_SESSION_TOKEN` (optional), or
138+
- `AWS_BEARER_TOKEN_BEDROCK`
139+
140+
Google Vertex AI (env only):
141+
- `VERTEX_PROJECT`, `VERTEX_LOCATION`
142+
- `GOOGLE_APPLICATION_CREDENTIALS` (optional if using ADC in GCP environments)
143+
144+
Groq / Mistral / Cohere (env only):
145+
- `GROQ_API_KEY`, `MISTRAL_API_KEY`, `COHERE_API_KEY`
146+
104147
### Build it yourself
105148
106149
1. Clone crAPI repository

services/chatbot/.env

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,6 @@ export DEFAULT_MODEL=gpt-4o-mini
1919
export MAX_CONTENT_LENGTH=50000
2020
export CHROMA_HOST=localhost
2121
export CHROMA_PORT=8000
22+
export CHATBOT_LLM_PROVIDER=openai
23+
export CHATBOT_LLM_MODEL=gpt-4o-mini
2224
export CHATBOT_OPENAI_API_KEY=

services/chatbot/requirements.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,10 @@ quart-cors==0.8.0
2020
motor==3.7.1
2121
faiss-cpu==1.12.0
2222
psycopg2-binary==2.9.11
23-
uvicorn==0.38.0
23+
uvicorn==0.38.0
24+
langchain-aws
25+
langchain-google-vertexai
26+
langchain-anthropic
27+
langchain-groq
28+
langchain-mistralai
29+
langchain-cohere

0 commit comments

Comments
 (0)