diff --git a/k8s/apps/paperless/paperless-ai.yaml b/k8s/apps/paperless/paperless-ai.yaml index ea6b975..30b28e6 100644 --- a/k8s/apps/paperless/paperless-ai.yaml +++ b/k8s/apps/paperless/paperless-ai.yaml @@ -21,6 +21,42 @@ spec: - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule + volumes: + - name: paperless-ai-data + persistentVolumeClaim: + claimName: paperless-ai-data + initContainers: + - name: fetch-llm-token + image: curlimages/curl:8.12.0 + command: + - sh + - -c + - | + set -e + echo "[init] Fetching JWT token from Authentik for paperless-ai-agent..." + + # Get JWT token via client_credentials grant + TOKEN_RESPONSE=$(curl -s -X POST https://authentik.riotpiao.com/application/o/token/ \ + -d "grant_type=client_credentials" \ + -d "client_id=paperless-ai-agent" \ + -d "client_secret=29skAhE0tBzWn0qrPvmPTQMva0joFjcCr7msDQr_VXQ" \ + -d "scope=openid llm:inference" 2>/dev/null) + + # Extract token + TOKEN=$(echo "$TOKEN_RESPONSE" | grep -o '"access_token":"[^"]*' | cut -d'"' -f4) + + if [ -z "$TOKEN" ]; then + echo "[error] Failed to get token. Response: $TOKEN_RESPONSE" + exit 1 + fi + + # Store token in file for main container to read + mkdir -p /data + echo "$TOKEN" > /data/llm_token.txt + echo "[init] Token fetched and stored (length: ${#TOKEN})" + volumeMounts: + - name: paperless-ai-data + mountPath: /data containers: - name: paperless-ai image: clusterzx/paperless-ai:latest @@ -35,18 +71,20 @@ spec: key: PAPERLESS_API_TOKEN - name: PAPERLESS_USERNAME value: "admin" - # LLM API — local gateway, no auth required (phase 3 not built yet) + # LLM API — via public gateway with JWT auth - name: AI_PROVIDER value: "custom" - name: CUSTOM_BASE_URL - value: "http://reasoning-predictor.llm-serving.svc.cluster.local:80/v1" - - name: CUSTOM_API_KEY - value: "not-required" + value: "https://api.riotpiao.com/v1" + # Token will be read from file at runtime by the application + # The init container fetches it and stores in /app/data/llm_token.txt + - name: CUSTOM_API_KEY_FILE + value: "/app/data/llm_token.txt" - name: CUSTOM_MODEL - value: "reasoning" - # Behavior + value: "qwen2.5:3b-instruct" + # Behavior - scan for new documents and tag them - name: SCAN_INTERVAL - value: "300" + value: "60" - name: PROCESS_PREDEFINED_DOCUMENTS value: "no" - name: ADD_AI_TAG @@ -55,6 +93,11 @@ spec: value: "ai-processed" - name: USE_PROMPT_TAGS value: "yes" + - name: ADD_AI_DESCRIPTIONS + value: "yes" + volumeMounts: + - name: paperless-ai-data + mountPath: /app/data resources: requests: cpu: 100m