def load_cg_rag_config() -> CgRagConfig:
load_env_file()
return CgRagConfig(
http_prefix=_clean_path(
_env_str("CG_RAG_HTTP_PREFIX", "QUESTION_GENERATED_APP_HTTP_PREFIX", "/cg-rag"),
"/cg-rag",
),
mcp_path=_clean_path(
_env_str("CG_RAG_MCP_PATH", "QUESTION_GENERATED_APP_MCP_PATH", "/cg-rag/mcp"),
"/cg-rag/mcp",
),
llm_provider=_normalize_llm_provider(
_env_str("CG_RAG_LLM_PROVIDER", "QUESTION_GENERATED_APP_LLM_PROVIDER", "deepseek")
),
generation_endpoint=_env_str(
"CG_RAG_GENERATION_ENDPOINT",
"QUESTION_GENERATED_APP_GENERATION_ENDPOINT",
"",
),
generation_model=_env_str(
"CG_RAG_GENERATION_MODEL",
"QUESTION_GENERATED_APP_GENERATION_MODEL",
"",
),
api_key=_env_str("CG_RAG_API_KEY", "QUESTION_GENERATED_APP_API_KEY", ""),
generation_response_format_json=_env_bool(
"CG_RAG_GENERATION_RESPONSE_FORMAT_JSON",
"QUESTION_GENERATED_APP_GENERATION_RESPONSE_FORMAT_JSON",
True,
),
generation_enable_thinking=_env_bool(
"CG_RAG_GENERATION_ENABLE_THINKING",
"QUESTION_GENERATED_APP_GENERATION_ENABLE_THINKING",
False,
),
generation_streaming=_env_bool(
"CG_RAG_GENERATION_STREAMING",
"QUESTION_GENERATED_APP_GENERATION_STREAMING",
True,
),
stream_answer_token_delay_seconds=_env_non_negative_float(
"CG_RAG_STREAM_ANSWER_TOKEN_DELAY_SECONDS",
"QUESTION_GENERATED_APP_STREAM_ANSWER_TOKEN_DELAY_SECONDS",
DEFAULT_STREAM_ANSWER_TOKEN_DELAY_SECONDS,
),
timeout_seconds=_env_float(
"CG_RAG_TIMEOUT_SECONDS",
"QUESTION_GENERATED_APP_TIMEOUT_SECONDS",
DEFAULT_TIMEOUT_SECONDS,
),
max_context_docs=_env_positive_int(
"CG_RAG_MAX_CONTEXT_DOCS",
"QUESTION_GENERATED_APP_MAX_CONTEXT_DOCS",
DEFAULT_MAX_CONTEXT_DOCS,
),
default_max_items=_env_positive_int(
"CG_RAG_DEFAULT_MAX_ITEMS",
"QUESTION_GENERATED_APP_DEFAULT_MAX_ITEMS",
DEFAULT_MAX_ITEMS,
),
cache_max_entries=_env_non_negative_int(
"CG_RAG_RETRIEVE_CACHE_MAX_ENTRIES",
"QUESTION_GENERATED_APP_RETRIEVE_CACHE_MAX_ENTRIES",
DEFAULT_CACHE_MAX_ENTRIES,
),
cache_ttl_seconds=_env_non_negative_float(
"CG_RAG_RETRIEVE_CACHE_TTL_SECONDS",
"QUESTION_GENERATED_APP_RETRIEVE_CACHE_TTL_SECONDS",
DEFAULT_CACHE_TTL_SECONDS,
),
hydration_sidecar_enabled=_env_bool(
"CG_RAG_HYDRATION_SIDECAR_ENABLED",
"QUESTION_GENERATED_APP_HYDRATION_SIDECAR_ENABLED",
True,
),
hydration_sidecar_path=_env_str(
"CG_RAG_HYDRATION_SIDECAR_PATH",
"QUESTION_GENERATED_APP_HYDRATION_SIDECAR_PATH",
"",
),
generation_concurrency=_env_positive_int(
"CG_RAG_GENERATION_CONCURRENCY",
"QUESTION_GENERATED_APP_GENERATION_CONCURRENCY",
DEFAULT_GENERATION_CONCURRENCY,
),
retrieval_concurrency=_env_positive_int(
"CG_RAG_RETRIEVAL_CONCURRENCY",
"QUESTION_GENERATED_APP_RETRIEVAL_CONCURRENCY",
DEFAULT_RETRIEVAL_CONCURRENCY,
),
capacity_wait_timeout_seconds=_env_float(
"CG_RAG_CAPACITY_WAIT_TIMEOUT_SECONDS",
"QUESTION_GENERATED_APP_CAPACITY_WAIT_TIMEOUT_SECONDS",
DEFAULT_CAPACITY_WAIT_TIMEOUT_SECONDS,
),
vision_endpoint=_env_str(
"CG_RAG_VISION_ENDPOINT",
"QUESTION_GENERATED_APP_VISION_ENDPOINT",
"",
),
vision_model=_env_str(
"CG_RAG_VISION_MODEL",
"QUESTION_GENERATED_APP_VISION_MODEL",
"",
),
vision_api_key=_env_str(
"CG_RAG_VISION_API_KEY",
"QUESTION_GENERATED_APP_VISION_API_KEY",
"",
),
vision_enable_thinking=_env_bool(
"CG_RAG_VISION_ENABLE_THINKING",
"QUESTION_GENERATED_APP_VISION_ENABLE_THINKING",
False,
),
vision_streaming=_env_bool(
"CG_RAG_VISION_STREAMING",
"QUESTION_GENERATED_APP_VISION_STREAMING",
True,
),
vision_max_images=_env_positive_int(
"CG_RAG_VISION_MAX_IMAGES",
"QUESTION_GENERATED_APP_VISION_MAX_IMAGES",
DEFAULT_VISION_MAX_IMAGES,
),
vision_max_image_bytes=_env_positive_int(
"CG_RAG_VISION_MAX_IMAGE_BYTES",
"QUESTION_GENERATED_APP_VISION_MAX_IMAGE_BYTES",
DEFAULT_VISION_MAX_IMAGE_BYTES,
),
vision_max_pixels=_env_positive_int(
"CG_RAG_VISION_MAX_PIXELS",
"QUESTION_GENERATED_APP_VISION_MAX_PIXELS",
DEFAULT_VISION_MAX_PIXELS,
),
vision_max_dimension=_env_positive_int(
"CG_RAG_VISION_MAX_DIMENSION",
"QUESTION_GENERATED_APP_VISION_MAX_DIMENSION",
DEFAULT_VISION_MAX_DIMENSION,
),
vision_normalized_max_dimension=_env_positive_int(
"CG_RAG_VISION_NORMALIZED_MAX_DIMENSION",
"QUESTION_GENERATED_APP_VISION_NORMALIZED_MAX_DIMENSION",
DEFAULT_VISION_NORMALIZED_MAX_DIMENSION,
),
vision_jpeg_quality=_env_positive_int(
"CG_RAG_VISION_JPEG_QUALITY",
"QUESTION_GENERATED_APP_VISION_JPEG_QUALITY",
DEFAULT_VISION_JPEG_QUALITY,
),
vision_max_tokens=_env_positive_int(
"CG_RAG_VISION_MAX_TOKENS",
"QUESTION_GENERATED_APP_VISION_MAX_TOKENS",
DEFAULT_VISION_MAX_TOKENS,
),
vision_agentic_max_search_rounds=_env_positive_int(
"CG_RAG_VISION_AGENTIC_MAX_SEARCH_ROUNDS",
"QUESTION_GENERATED_APP_VISION_AGENTIC_MAX_SEARCH_ROUNDS",
DEFAULT_VISION_AGENTIC_MAX_SEARCH_ROUNDS,
),
vision_agentic_retrieval_topk=_env_positive_int(
"CG_RAG_VISION_AGENTIC_RETRIEVAL_TOPK",
"QUESTION_GENERATED_APP_VISION_AGENTIC_RETRIEVAL_TOPK",
DEFAULT_VISION_AGENTIC_RETRIEVAL_TOPK,
),
vision_agentic_workflow=_env_agentic_workflow(),
inbound_token=_env_str("CG_RAG_INBOUND_TOKEN", "", ""),
expose_docs=_env_bool("CG_RAG_EXPOSE_DOCS", "", False),
vision_profile=_env_vision_profile(),
vision_total_budget_seconds=_env_non_negative_float(
"CG_RAG_VISION_TOTAL_BUDGET_SECONDS",
"QUESTION_GENERATED_APP_VISION_TOTAL_BUDGET_SECONDS",
0.0,
),
vision_sse_heartbeat_seconds=_env_float(
"CG_RAG_VISION_SSE_HEARTBEAT_SECONDS",
"QUESTION_GENERATED_APP_VISION_SSE_HEARTBEAT_SECONDS",
-1.0,
),
vision_strict_retrieval_failure=_env_str(
"CG_RAG_VISION_STRICT_RETRIEVAL_FAILURE",
"QUESTION_GENERATED_APP_VISION_STRICT_RETRIEVAL_FAILURE",
"",
),
vision_upstream_retry_count=_env_non_negative_int(
"CG_RAG_VISION_UPSTREAM_RETRY_COUNT",
"QUESTION_GENERATED_APP_VISION_UPSTREAM_RETRY_COUNT",
0,
),
vision_upstream_retry_sleep_seconds=_env_float(
"CG_RAG_VISION_UPSTREAM_RETRY_SLEEP_SECONDS",
"QUESTION_GENERATED_APP_VISION_UPSTREAM_RETRY_SLEEP_SECONDS",
-1.0,
),
hybrid_generation_endpoint=_env_str("CG_RAG_HYBRID_GENERATION_ENDPOINT", "", ""),
hybrid_generation_model=_env_str("CG_RAG_HYBRID_GENERATION_MODEL", "", ""),
hybrid_generation_api_key=_env_str("CG_RAG_HYBRID_GENERATION_API_KEY", "", ""),
)