diff --git a/backend/danswer/db/connector_credential_pair.py b/backend/danswer/db/connector_credential_pair.py index 8dfd5a393e1..314a31eddcd 100644 --- a/backend/danswer/db/connector_credential_pair.py +++ b/backend/danswer/db/connector_credential_pair.py @@ -201,7 +201,7 @@ def add_credential_to_connector( def remove_credential_from_connector( connector_id: int, credential_id: int, - user: User, + user: User | None, db_session: Session, ) -> StatusResponse[int]: connector = fetch_connector_by_id(connector_id, db_session) diff --git a/backend/danswer/server/documents/cc_pair.py b/backend/danswer/server/documents/cc_pair.py index c6026401d6c..861657a43ea 100644 --- a/backend/danswer/server/documents/cc_pair.py +++ b/backend/danswer/server/documents/cc_pair.py @@ -77,7 +77,7 @@ def associate_credential_to_connector( connector_id: int, credential_id: int, metadata: ConnectorCredentialPairMetadata, - user: User = Depends(current_user), + user: User | None = Depends(current_user), db_session: Session = Depends(get_session), ) -> StatusResponse[int]: try: @@ -97,7 +97,7 @@ def associate_credential_to_connector( def dissociate_credential_from_connector( connector_id: int, credential_id: int, - user: User = Depends(current_user), + user: User | None = Depends(current_user), db_session: Session = Depends(get_session), ) -> StatusResponse[int]: return remove_credential_from_connector( diff --git a/deployment/docker_compose/docker-compose.dev.yml b/deployment/docker_compose/docker-compose.dev.yml index ea58ded3f7f..20c6bbc8b94 100644 --- a/deployment/docker_compose/docker-compose.dev.yml +++ b/deployment/docker_compose/docker-compose.dev.yml @@ -287,6 +287,7 @@ services: max-size: "50m" max-file: "6" + relational_db: image: postgres:15.2-alpine restart: always @@ -335,7 +336,7 @@ services: options: max-size: "50m" max-file: "6" - # the specified script waits for the api_server to start up. + # The specified script waits for the api_server to start up. # Without this we've seen issues where nginx shows no error logs but # does not recieve any traffic # NOTE: we have to use dos2unix to remove Carriage Return chars from the file diff --git a/deployment/docker_compose/docker-compose.gpu-dev.yml b/deployment/docker_compose/docker-compose.gpu-dev.yml index 352cafba4f4..82cfd6b4087 100644 --- a/deployment/docker_compose/docker-compose.gpu-dev.yml +++ b/deployment/docker_compose/docker-compose.gpu-dev.yml @@ -343,7 +343,7 @@ services: options: max-size: "50m" max-file: "6" - # the specified script waits for the api_server to start up. + # The specified script waits for the api_server to start up. # Without this we've seen issues where nginx shows no error logs but # does not recieve any traffic # NOTE: we have to use dos2unix to remove Carriage Return chars from the file diff --git a/deployment/docker_compose/docker-compose.prod-no-letsencrypt.yml b/deployment/docker_compose/docker-compose.prod-no-letsencrypt.yml index 46d339af8f2..619e6f10dd0 100644 --- a/deployment/docker_compose/docker-compose.prod-no-letsencrypt.yml +++ b/deployment/docker_compose/docker-compose.prod-no-letsencrypt.yml @@ -190,7 +190,7 @@ services: options: max-size: "50m" max-file: "6" - # the specified script waits for the api_server to start up. + # The specified script waits for the api_server to start up. # Without this we've seen issues where nginx shows no error logs but # does not recieve any traffic # NOTE: we have to use dos2unix to remove Carriage Return chars from the file diff --git a/deployment/docker_compose/docker-compose.prod.yml b/deployment/docker_compose/docker-compose.prod.yml index ff8e4289ae4..1466332a6e2 100644 --- a/deployment/docker_compose/docker-compose.prod.yml +++ b/deployment/docker_compose/docker-compose.prod.yml @@ -193,7 +193,7 @@ services: options: max-size: "50m" max-file: "6" - # the specified script waits for the api_server to start up. + # The specified script waits for the api_server to start up. # Without this we've seen issues where nginx shows no error logs but # does not recieve any traffic # NOTE: we have to use dos2unix to remove Carriage Return chars from the file diff --git a/deployment/docker_compose/docker-compose.search-testing.yml b/deployment/docker_compose/docker-compose.search-testing.yml index a88323d33cc..b0a139d390f 100644 --- a/deployment/docker_compose/docker-compose.search-testing.yml +++ b/deployment/docker_compose/docker-compose.search-testing.yml @@ -12,89 +12,17 @@ services: depends_on: - relational_db - index - # - inference_model_server restart: always ports: - "8080" + env_file: + - .env environment: - # Auth Settings - - AUTH_TYPE=${AUTH_TYPE:-disabled} - - SESSION_EXPIRE_TIME_SECONDS=${SESSION_EXPIRE_TIME_SECONDS:-86400} - - ENCRYPTION_KEY_SECRET=${ENCRYPTION_KEY_SECRET:-} - - VALID_EMAIL_DOMAINS=${VALID_EMAIL_DOMAINS:-} - - GOOGLE_OAUTH_CLIENT_ID=${GOOGLE_OAUTH_CLIENT_ID:-} - - GOOGLE_OAUTH_CLIENT_SECRET=${GOOGLE_OAUTH_CLIENT_SECRET:-} - - REQUIRE_EMAIL_VERIFICATION=${REQUIRE_EMAIL_VERIFICATION:-} - - SMTP_SERVER=${SMTP_SERVER:-} # For sending verification emails, if unspecified then defaults to 'smtp.gmail.com' - - SMTP_PORT=${SMTP_PORT:-587} # For sending verification emails, if unspecified then defaults to '587' - - SMTP_USER=${SMTP_USER:-} - - SMTP_PASS=${SMTP_PASS:-} - - EMAIL_FROM=${EMAIL_FROM:-} - - OAUTH_CLIENT_ID=${OAUTH_CLIENT_ID:-} - - OAUTH_CLIENT_SECRET=${OAUTH_CLIENT_SECRET:-} - - OPENID_CONFIG_URL=${OPENID_CONFIG_URL:-} - # Gen AI Settings - - GEN_AI_MODEL_PROVIDER=${GEN_AI_MODEL_PROVIDER:-} - - GEN_AI_MODEL_VERSION=${GEN_AI_MODEL_VERSION:-} - - FAST_GEN_AI_MODEL_VERSION=${FAST_GEN_AI_MODEL_VERSION:-} - - GEN_AI_API_KEY=${GEN_AI_API_KEY:-} - - GEN_AI_API_ENDPOINT=${GEN_AI_API_ENDPOINT:-} - - GEN_AI_API_VERSION=${GEN_AI_API_VERSION:-} - - GEN_AI_LLM_PROVIDER_TYPE=${GEN_AI_LLM_PROVIDER_TYPE:-} - - GEN_AI_MAX_TOKENS=${GEN_AI_MAX_TOKENS:-} - - QA_TIMEOUT=${QA_TIMEOUT:-} - - MAX_CHUNKS_FED_TO_CHAT=${MAX_CHUNKS_FED_TO_CHAT:-} - - DISABLE_LLM_FILTER_EXTRACTION=${DISABLE_LLM_FILTER_EXTRACTION:-} - - DISABLE_LLM_CHUNK_FILTER=${DISABLE_LLM_CHUNK_FILTER:-} - - DISABLE_LLM_CHOOSE_SEARCH=${DISABLE_LLM_CHOOSE_SEARCH:-} - - DISABLE_LLM_QUERY_REPHRASE=${DISABLE_LLM_QUERY_REPHRASE:-} - - DISABLE_GENERATIVE_AI=${DISABLE_GENERATIVE_AI:-} - - DISABLE_LITELLM_STREAMING=${DISABLE_LITELLM_STREAMING:-} - - LITELLM_EXTRA_HEADERS=${LITELLM_EXTRA_HEADERS:-} - - BING_API_KEY=${BING_API_KEY:-} - # if set, allows for the use of the token budget system - - TOKEN_BUDGET_GLOBALLY_ENABLED=${TOKEN_BUDGET_GLOBALLY_ENABLED:-} - # Enables the use of bedrock models - - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-} - - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-} - - AWS_REGION_NAME=${AWS_REGION_NAME:-} - # Query Options - - DOC_TIME_DECAY=${DOC_TIME_DECAY:-} # Recency Bias for search results, decay at 1 / (1 + DOC_TIME_DECAY * x years) - - HYBRID_ALPHA=${HYBRID_ALPHA:-} # Hybrid Search Alpha (0 for entirely keyword, 1 for entirely vector) - - EDIT_KEYWORD_QUERY=${EDIT_KEYWORD_QUERY:-} - - MULTILINGUAL_QUERY_EXPANSION=${MULTILINGUAL_QUERY_EXPANSION:-} - - LANGUAGE_HINT=${LANGUAGE_HINT:-} - - LANGUAGE_CHAT_NAMING_HINT=${LANGUAGE_CHAT_NAMING_HINT:-} - - QA_PROMPT_OVERRIDE=${QA_PROMPT_OVERRIDE:-} - # Other services + - AUTH_TYPE=disabled - POSTGRES_HOST=relational_db - VESPA_HOST=index - - WEB_DOMAIN=${WEB_DOMAIN:-} # For frontend redirect auth purpose - # Don't change the NLP model configs unless you know what you're doing - - DOCUMENT_ENCODER_MODEL=${DOCUMENT_ENCODER_MODEL:-} - - DOC_EMBEDDING_DIM=${DOC_EMBEDDING_DIM:-} - - NORMALIZE_EMBEDDINGS=${NORMALIZE_EMBEDDINGS:-} - - ASYM_QUERY_PREFIX=${ASYM_QUERY_PREFIX:-} - - ENABLE_RERANKING_REAL_TIME_FLOW=${ENABLE_RERANKING_REAL_TIME_FLOW:-} - - ENABLE_RERANKING_ASYNC_FLOW=${ENABLE_RERANKING_ASYNC_FLOW:-} - - MODEL_SERVER_HOST=${MODEL_SERVER_HOST:-} - - MODEL_SERVER_ALLOWED_HOST=${MODEL_SERVER_HOST:-} - - MODEL_SERVER_PORT=${MODEL_SERVER_PORT:-} - # Leave this on pretty please? Nothing sensitive is collected! - # https://docs.danswer.dev/more/telemetry - - DISABLE_TELEMETRY=${DISABLE_TELEMETRY:-} - - LOG_LEVEL=${LOG_LEVEL:-info} # Set to debug to get more fine-grained logs - - LOG_ALL_MODEL_INTERACTIONS=${LOG_ALL_MODEL_INTERACTIONS:-} # Log all of the prompts to the LLM - # If set to `true` will enable additional logs about Vespa query performance - # (time spent on finding the right docs + time spent fetching summaries from disk) - - LOG_VESPA_TIMING_INFORMATION=${LOG_VESPA_TIMING_INFORMATION:-} - - LOG_ENDPOINT_LATENCY=${LOG_ENDPOINT_LATENCY:-} - - # Enterprise Edition only - - ENABLE_PAID_ENTERPRISE_EDITION_FEATURES=${ENABLE_PAID_ENTERPRISE_EDITION_FEATURES:-false} - - API_KEY_HASH_ROUNDS=${API_KEY_HASH_ROUNDS:-} - # Seeding configuration - - ENV_SEED_CONFIGURATION=${ENV_SEED_CONFIGURATION:-} + - MODEL_SERVER_HOST=${MODEL_SERVER_HOST:-inference_model_server} + - ENABLE_PAID_ENTERPRISE_EDITION_FEATURES=True extra_hosts: - "host.docker.internal:host-gateway" logging: @@ -113,91 +41,16 @@ services: depends_on: - relational_db - index - # - inference_model_server - # - indexing_model_server restart: always + env_file: + - .env environment: - - ENCRYPTION_KEY_SECRET=${ENCRYPTION_KEY_SECRET:-} - # Gen AI Settings (Needed by DanswerBot) - - GEN_AI_MODEL_PROVIDER=${GEN_AI_MODEL_PROVIDER:-} - - GEN_AI_MODEL_VERSION=${GEN_AI_MODEL_VERSION:-} - - FAST_GEN_AI_MODEL_VERSION=${FAST_GEN_AI_MODEL_VERSION:-} - - GEN_AI_API_KEY=${GEN_AI_API_KEY:-} - - GEN_AI_API_ENDPOINT=${GEN_AI_API_ENDPOINT:-} - - GEN_AI_API_VERSION=${GEN_AI_API_VERSION:-} - - GEN_AI_LLM_PROVIDER_TYPE=${GEN_AI_LLM_PROVIDER_TYPE:-} - - GEN_AI_MAX_TOKENS=${GEN_AI_MAX_TOKENS:-} - - QA_TIMEOUT=${QA_TIMEOUT:-} - - MAX_CHUNKS_FED_TO_CHAT=${MAX_CHUNKS_FED_TO_CHAT:-} - - DISABLE_LLM_FILTER_EXTRACTION=${DISABLE_LLM_FILTER_EXTRACTION:-} - - DISABLE_LLM_CHUNK_FILTER=${DISABLE_LLM_CHUNK_FILTER:-} - - DISABLE_LLM_CHOOSE_SEARCH=${DISABLE_LLM_CHOOSE_SEARCH:-} - - DISABLE_LLM_QUERY_REPHRASE=${DISABLE_LLM_QUERY_REPHRASE:-} - - DISABLE_GENERATIVE_AI=${DISABLE_GENERATIVE_AI:-} - - GENERATIVE_MODEL_ACCESS_CHECK_FREQ=${GENERATIVE_MODEL_ACCESS_CHECK_FREQ:-} - - DISABLE_LITELLM_STREAMING=${DISABLE_LITELLM_STREAMING:-} - - LITELLM_EXTRA_HEADERS=${LITELLM_EXTRA_HEADERS:-} - - BING_API_KEY=${BING_API_KEY:-} - # Query Options - - DOC_TIME_DECAY=${DOC_TIME_DECAY:-} # Recency Bias for search results, decay at 1 / (1 + DOC_TIME_DECAY * x years) - - HYBRID_ALPHA=${HYBRID_ALPHA:-} # Hybrid Search Alpha (0 for entirely keyword, 1 for entirely vector) - - EDIT_KEYWORD_QUERY=${EDIT_KEYWORD_QUERY:-} - - MULTILINGUAL_QUERY_EXPANSION=${MULTILINGUAL_QUERY_EXPANSION:-} - - LANGUAGE_HINT=${LANGUAGE_HINT:-} - - LANGUAGE_CHAT_NAMING_HINT=${LANGUAGE_CHAT_NAMING_HINT:-} - - QA_PROMPT_OVERRIDE=${QA_PROMPT_OVERRIDE:-} - # Other Services + - AUTH_TYPE=disabled - POSTGRES_HOST=relational_db - - POSTGRES_USER=${POSTGRES_USER:-} - - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-} - - POSTGRES_DB=${POSTGRES_DB:-} - VESPA_HOST=index - - WEB_DOMAIN=${WEB_DOMAIN:-} # For frontend redirect auth purpose for OAuth2 connectors - # Don't change the NLP model configs unless you know what you're doing - - DOCUMENT_ENCODER_MODEL=${DOCUMENT_ENCODER_MODEL:-} - - DOC_EMBEDDING_DIM=${DOC_EMBEDDING_DIM:-} - - NORMALIZE_EMBEDDINGS=${NORMALIZE_EMBEDDINGS:-} - - ASYM_QUERY_PREFIX=${ASYM_QUERY_PREFIX:-} # Needed by DanswerBot - - ASYM_PASSAGE_PREFIX=${ASYM_PASSAGE_PREFIX:-} - - MODEL_SERVER_HOST=${MODEL_SERVER_HOST:-} - - MODEL_SERVER_ALLOWED_HOST=${MODEL_SERVER_HOST:-} - - MODEL_SERVER_PORT=${MODEL_SERVER_PORT:-} - - INDEXING_MODEL_SERVER_HOST=${INDEXING_MODEL_SERVER_HOST:-} - # Indexing Configs - - NUM_INDEXING_WORKERS=${NUM_INDEXING_WORKERS:-} - - ENABLED_CONNECTOR_TYPES=${ENABLED_CONNECTOR_TYPES:-} - - DISABLE_INDEX_UPDATE_ON_SWAP=${DISABLE_INDEX_UPDATE_ON_SWAP:-} - - DASK_JOB_CLIENT_ENABLED=${DASK_JOB_CLIENT_ENABLED:-} - - CONTINUE_ON_CONNECTOR_FAILURE=${CONTINUE_ON_CONNECTOR_FAILURE:-} - - EXPERIMENTAL_CHECKPOINTING_ENABLED=${EXPERIMENTAL_CHECKPOINTING_ENABLED:-} - - CONFLUENCE_CONNECTOR_LABELS_TO_SKIP=${CONFLUENCE_CONNECTOR_LABELS_TO_SKIP:-} - - JIRA_CONNECTOR_LABELS_TO_SKIP=${JIRA_CONNECTOR_LABELS_TO_SKIP:-} - - WEB_CONNECTOR_VALIDATE_URLS=${WEB_CONNECTOR_VALIDATE_URLS:-} - - JIRA_API_VERSION=${JIRA_API_VERSION:-} - - GONG_CONNECTOR_START_TIME=${GONG_CONNECTOR_START_TIME:-} - - NOTION_CONNECTOR_ENABLE_RECURSIVE_PAGE_LOOKUP=${NOTION_CONNECTOR_ENABLE_RECURSIVE_PAGE_LOOKUP:-} - - GITHUB_CONNECTOR_BASE_URL=${GITHUB_CONNECTOR_BASE_URL:-} - # Danswer SlackBot Configs - - DANSWER_BOT_SLACK_APP_TOKEN=${DANSWER_BOT_SLACK_APP_TOKEN:-} - - DANSWER_BOT_SLACK_BOT_TOKEN=${DANSWER_BOT_SLACK_BOT_TOKEN:-} - - DANSWER_BOT_DISABLE_DOCS_ONLY_ANSWER=${DANSWER_BOT_DISABLE_DOCS_ONLY_ANSWER:-} - - DANSWER_BOT_FEEDBACK_VISIBILITY=${DANSWER_BOT_FEEDBACK_VISIBILITY:-} - - DANSWER_BOT_DISPLAY_ERROR_MSGS=${DANSWER_BOT_DISPLAY_ERROR_MSGS:-} - - DANSWER_BOT_RESPOND_EVERY_CHANNEL=${DANSWER_BOT_RESPOND_EVERY_CHANNEL:-} - - DANSWER_BOT_DISABLE_COT=${DANSWER_BOT_DISABLE_COT:-} # Currently unused - - NOTIFY_SLACKBOT_NO_ANSWER=${NOTIFY_SLACKBOT_NO_ANSWER:-} - - DANSWER_BOT_MAX_QPM=${DANSWER_BOT_MAX_QPM:-} - - DANSWER_BOT_MAX_WAIT_TIME=${DANSWER_BOT_MAX_WAIT_TIME:-} - # Logging - # Leave this on pretty please? Nothing sensitive is collected! - # https://docs.danswer.dev/more/telemetry - - DISABLE_TELEMETRY=${DISABLE_TELEMETRY:-} - - LOG_LEVEL=${LOG_LEVEL:-info} # Set to debug to get more fine-grained logs - - LOG_ALL_MODEL_INTERACTIONS=${LOG_ALL_MODEL_INTERACTIONS:-} # Log all of the prompts to the LLM - - LOG_VESPA_TIMING_INFORMATION=${LOG_VESPA_TIMING_INFORMATION:-} - - # Enterprise Edition stuff - - ENABLE_PAID_ENTERPRISE_EDITION_FEATURES=${ENABLE_PAID_ENTERPRISE_EDITION_FEATURES:-false} + - MODEL_SERVER_HOST=${MODEL_SERVER_HOST:-inference_model_server} + - INDEXING_MODEL_SERVER_HOST=${INDEXING_MODEL_SERVER_HOST:-indexing_model_server} + - ENABLE_PAID_ENTERPRISE_EDITION_FEATURES=True extra_hosts: - "host.docker.internal:host-gateway" logging: @@ -250,10 +103,7 @@ services: restart: on-failure environment: - MIN_THREADS_ML_MODELS=${MIN_THREADS_ML_MODELS:-} - # Set to debug to get more fine-grained logs - - LOG_LEVEL=${LOG_LEVEL:-info} - # volumes: - # Not necessary, this is just to reduce download time during startup + - LOG_LEVEL=${LOG_LEVEL:-debug} - inference_model_cache_huggingface:/root/.cache/huggingface/ logging: driver: json-file @@ -278,10 +128,7 @@ services: environment: - MIN_THREADS_ML_MODELS=${MIN_THREADS_ML_MODELS:-} - INDEXING_ONLY=True - # Set to debug to get more fine-grained logs - - LOG_LEVEL=${LOG_LEVEL:-info} - # volumes: - # Not necessary, this is just to reduce download time during startup + - LOG_LEVEL=${LOG_LEVEL:-debug} - index_model_cache_huggingface:/root/.cache/huggingface/ logging: driver: json-file @@ -289,6 +136,7 @@ services: max-size: "50m" max-file: "6" + relational_db: image: postgres:15.2-alpine restart: always @@ -337,7 +185,7 @@ services: options: max-size: "50m" max-file: "6" - # the specified script waits for the api_server to start up. + # The specified script waits for the api_server to start up. # Without this we've seen issues where nginx shows no error logs but # does not recieve any traffic # NOTE: we have to use dos2unix to remove Carriage Return chars from the file @@ -345,13 +193,7 @@ services: command: > /bin/sh -c "dos2unix /etc/nginx/conf.d/run-nginx.sh && /etc/nginx/conf.d/run-nginx.sh app.conf.template.dev" - -# volumes: -# db_volume: -# vespa_volume: -# # Created by the container itself -# model_cache_huggingface: volumes: db_volume: @@ -366,41 +208,3 @@ volumes: type: none o: bind device: ${DANSWER_VESPA_DATA_DIR:-./vespa_data} - model_cache_huggingface: - # driver: local - # driver_opts: - # type: none - # o: bind - # device: ${DANSWER_MODEL_CACHE_DIR:-./model_cache} - # index_model_cache_huggingface: - # driver: local - # driver_opts: - # type: none - # o: bind - # device: ${DANSWER_INDEX_MODEL_CACHE_DIR:-./model_cache} - # inference_model_cache_huggingface: - # driver: local - # driver_opts: - # type: none - # o: bind - # device: ${DANSWER_INFERENCE_MODEL_CACHE_DIR:-./model_cache} - -# volumes: -# db_volume: -# driver: local -# driver_opts: -# type: none -# o: bind -# device: ${DANSWER_POSTGRES_DATA_DIR:-./postgres_data} -# vespa_volume: -# driver: local -# driver_opts: -# type: none -# o: bind -# device: ${DANSWER_VESPA_DATA_DIR:-./vespa_data} -# model_cache_huggingface: -# driver: local -# driver_opts: -# type: none -# o: bind -# device: ${DANSWER_MODEL_CACHE_DIR:-./model_cache} \ No newline at end of file