Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
0a44540
refactor: Update inference configuration comments and remove TopP and…
nalbam Apr 13, 2026
ac985fb
Add logging utilities, Slack helpers, and tool registry with built-in…
nalbam Apr 17, 2026
10e0784
refactor: Update AWS role policy and streamline deployment workflow
nalbam Apr 17, 2026
af6bca3
fix: Update role-to-assume in AWS credentials configuration for deplo…
nalbam Apr 17, 2026
a9aea20
Add unit tests for logging utilities, Slack helpers, and tool functio…
nalbam Apr 17, 2026
328a16f
docs: Add missing image for Gurumi Bot in README
nalbam Apr 17, 2026
cca9f5d
feat: Add permissions for API Gateway tags in role policy
nalbam Apr 17, 2026
24ba902
refactor: Rename job from 'test-and-deploy' to 'deploy' in workflow c…
nalbam Apr 17, 2026
d1e04c4
chore: Update action versions and enhance step descriptions in workfl…
nalbam Apr 17, 2026
82447cb
docs: Update CLAUDE.md and README.md for clarity and workflow details
nalbam Apr 17, 2026
875035f
Update README.md
nalbam Apr 17, 2026
165d886
refactor: Remove path instructions from review configuration
nalbam Apr 20, 2026
0e385a3
feat(config): add web-fetch settings (MAX_WEB_CHARS/BYTES/LINKS, JINA…
nalbam Apr 20, 2026
03d51bf
test(config): drop redundant delenv loop in test_web_fetch_defaults
nalbam Apr 20, 2026
9bc676c
feat(tools): add SSRF guard and no-redirect handler for web fetch
nalbam Apr 20, 2026
302f143
fix(tools): strengthen SSRF guard (empty DNS, CGNAT, gaierror test)
nalbam Apr 20, 2026
3aeb526
feat(tools): add HTML extractor and Jina response parser for web fetch
nalbam Apr 20, 2026
3846fb0
fix(tools): harden Jina/HTML parsers (inline body, balanced parens, h…
nalbam Apr 20, 2026
ab5c449
feat(tools): add Jina Reader + direct-GET fetchers with size guards
nalbam Apr 20, 2026
a1e31c8
refactor(tools): extract web fetch timeout constant and annotate noqa
nalbam Apr 20, 2026
7ad31fb
refactor(tools): split web-fetch helpers into src/tools_web.py
nalbam Apr 20, 2026
cf82880
feat(tools): add fetch_webpage tool with Jina+raw fallback
nalbam Apr 20, 2026
6dc01cc
refactor(tools): clarify fetch_webpage fallback flow and demote jina-…
nalbam Apr 20, 2026
b1207fa
docs: document fetch_webpage env vars and SSRF gating
nalbam Apr 20, 2026
76410e1
fix(tools): document DNS rebinding, clarify except order, validate JI…
nalbam Apr 20, 2026
3d1f220
refactor(llms): split src/llm.py into src/llms package
nalbam Apr 20, 2026
2a07249
refactor(llms): drop unused imports introduced by the package split
nalbam Apr 20, 2026
9102a88
refactor(tests): split tests/test_llm.py into tests/llms package
nalbam Apr 20, 2026
1658246
refactor(tests): hoist inline json/base64 imports to module level
nalbam Apr 20, 2026
c8a3ff9
refactor(tests): hoist inline base64 import in test_xai
nalbam Apr 20, 2026
8d23d51
refactor(tools): split src/tools.py and src/tools_web.py into src/too…
nalbam Apr 20, 2026
2f33871
refactor(tools): use relative side-effect imports and note time.py st…
nalbam Apr 20, 2026
9d22f0d
refactor(tests): split tests/test_tools.py into tests/tools package
nalbam Apr 20, 2026
1e2e2f9
refactor(tests): drop unused imports in tests/tools after split
nalbam Apr 20, 2026
92294bf
docs: update module paths and document extension points
nalbam Apr 20, 2026
e3bca27
refactor(tests): drop empty llms test stubs
nalbam Apr 20, 2026
fd30c99
docs: refresh README and add extension guide
nalbam Apr 20, 2026
a316f8e
fix: add newline before response indication in step output
nalbam Apr 20, 2026
ef8e318
docs: sync CLAUDE.md + extending guide with current code
nalbam Apr 20, 2026
5c3a600
chore(deploy): wire MAX_WEB_*/JINA_READER_BASE and MAX_DOC_*/DEFAULT_…
nalbam Apr 20, 2026
d36faa7
chore(deploy): align env order across push.yml and serverless.yml (se…
nalbam Apr 20, 2026
cda6b5f
chore: add stackTags and tags for katalog_id in serverless.yml
nalbam Apr 20, 2026
f0ce062
feat: enhance UserNameCache with thread-safe warm method and parallel…
nalbam Apr 20, 2026
194a894
fix: route Bedrock Nova vision through Converse API
nalbam Apr 21, 2026
2c93727
fix: close ToolExecutor pool and catch provider exceptions
nalbam Apr 21, 2026
373dd7b
fix: recover stream on chat_update failures and redact more tokens
nalbam Apr 21, 2026
dcac908
perf: make ConversationStore.truncate_to_chars single-pass
nalbam Apr 21, 2026
b722980
fix: bypass channel allowlist for DMs and drop empty mentions early
nalbam Apr 21, 2026
f51de64
chore: drop unused AWS_REGION_NAME from Lambda env
nalbam Apr 21, 2026
2af0874
docs: sync test counts, coverage, and new invariants
nalbam Apr 21, 2026
7d9f04d
feat: layer system prompt and harden its guidance
nalbam Apr 21, 2026
bb32da9
feat: add additional API Gateway permissions for policy management
nalbam Apr 21, 2026
b554c77
chore: update AWS credentials action to v6 in workflow files
nalbam Apr 22, 2026
fc4eaa2
chore: raise Lambda and image tool timeouts
nalbam Apr 22, 2026
01041c6
refactor: split Lambda into receiver/worker paths
nalbam Apr 22, 2026
5c7b304
feat: configure Bedrock client with explicit timeout and retry settings
nalbam Apr 28, 2026
6a591f0
feat: add error handling for Slack API message length limits in Strea…
nalbam Apr 28, 2026
dc48b06
feat: update default allowed channel message for user guidance
nalbam Apr 29, 2026
a1aada3
feat: implement channel message substitution for blocked channels
nalbam Apr 29, 2026
075027b
feat: add user allowlist functionality with customizable messages for…
nalbam Apr 29, 2026
4a6c7ea
Merge pull request #12 from nalbam/feat/access-control
nalbam Apr 29, 2026
b3b4516
fix: prevent duplicate prefix in streaming reply after roll-finalize
nalbam Apr 29, 2026
3f6f477
fix: split messages on paragraph boundary, fence-aware code blocks
nalbam Apr 29, 2026
8f1e54b
fix: fall back to single \n when splitting code blocks and lists
nalbam Apr 29, 2026
7b6f99d
fix: balance code-fence on streaming roll-finalize
nalbam Apr 29, 2026
78bcc5e
fix: cut streaming roll at last newline, not mid-token
nalbam Apr 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,5 @@ reviews:
enabled: true
drafts: false
path_filters: ['!cassettes/**']
path_instructions:
- path: 'src/usecases/**/*.ts'
instructions: 'Clean Architecture 원칙과 ServiceResult 패턴을 따르는지 확인'
- path: '**/*.test.ts'
instructions: 'AAA 패턴(Arrange-Act-Assert)과 한국어 테스트 설명을 확인'
- path: 'src/domains/**/*.ts'
instructions: '도메인 모델이 순수하고 외부 의존성이 없는지 확인'
chat:
auto_reply: true
58 changes: 50 additions & 8 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,12 +1,54 @@
BOT_CURSOR=":loading:"
# --- Slack (required at runtime) ---
SLACK_BOT_TOKEN="xoxb-your-slack-bot-token"
SLACK_SIGNING_SECRET="your-slack-signing-secret"

SLACK_BOT_TOKEN="xoxb-xxxx"
SLACK_SIGNING_SECRET="xxxx"
# --- LLM / text (default: openai / gpt-4o-mini) ---
LLM_PROVIDER="openai" # openai | bedrock | xai
LLM_MODEL="gpt-4o-mini" # OpenAI: gpt-4o-mini / gpt-5 / o3 | Bedrock: us.anthropic.claude-opus-4-6-v1 / amazon.nova-pro-v1:0 | xAI: grok-4-1-fast-reasoning / grok-4.20-0309-reasoning

ALLOWED_CHANNEL_IDS="C000000,C000001"
ALLOWED_CHANNEL_MESSAGE="구루미에게 질문은 {} 채널을 이용해 주세요~"
# --- Image generation (default: openai / gpt-image-1) ---
IMAGE_PROVIDER="openai" # openai | bedrock | xai
IMAGE_MODEL="gpt-image-1" # OpenAI: gpt-image-1 / dall-e-3 | Bedrock: amazon.nova-canvas-v1:0 / amazon.titan-image-generator-v2:0 | xAI: grok-imagine-image / grok-imagine-image-pro

PERSONAL_MESSAGE="너는 AWSKRUG(AWS Korea User Group)의 친절하고 전문적인 AI 비서 구루미(Gurumi)야."
SYSTEM_MESSAGE="참고한 링크가 있다면 링크도 알려주세요. 한국어로 응답해주세요."
# --- Providers (required by provider in use) ---
OPENAI_API_KEY="sk-your-openai-api-key"
XAI_API_KEY="" # required when LLM_PROVIDER=xai or IMAGE_PROVIDER=xai. Get at https://console.x.ai
TAVILY_API_KEY="" # optional, enables richer web search

REACTION_EMOJIS="refund-done"
# --- Agent behavior ---
AGENT_MAX_STEPS=3
MAX_OUTPUT_TOKENS=4096 # per-LLM-hop output token cap (>=256)
RESPONSE_LANGUAGE="ko" # ko | en

# --- Slack UX ---
BOT_CURSOR=":robot_face:"
MAX_LEN_SLACK=3000 # per-message character cap, >=500
SYSTEM_MESSAGE="" # optional extra operator policy appended to task rules
PERSONA_MESSAGE="" # optional answer style / tone (e.g. "자연스러운 한국어로 핵심부터 답한다")

# --- Access control / throttle ---
ALLOWED_CHANNEL_IDS="" # comma-separated channel IDs, empty = allow all
ALLOWED_CHANNEL_MESSAGE="" # reply sent when channel not allowed; "{}" → first allowed channel
ALLOWED_USER_IDS="" # comma-separated user IDs, empty = allow all (applies to DMs too)
ALLOWED_USER_MESSAGE="" # reply sent when user not allowed; "{}" → first allowed user
MAX_THROTTLE_COUNT=100 # per-user active request cap

# --- Storage (DynamoDB — created by serverless deploy) ---
DYNAMODB_TABLE_NAME="lambda-gurumi-bot-dev"
MAX_HISTORY_CHARS=4000
AWS_REGION="us-east-1"

# --- Observability ---
LOG_LEVEL="INFO"

# --- Document / time ---
DEFAULT_TIMEZONE="Asia/Seoul" # IANA TZ for get_current_time default
MAX_DOC_CHARS=20000 # per-document extracted-text cap (>=1000)
MAX_DOC_PAGES=50 # per-document PDF page cap (>=1)
MAX_DOC_BYTES=26214400 # per-document download cap, 25MB (>=65536)

# --- Web fetch (fetch_webpage tool) ---
MAX_WEB_CHARS=8000 # per-fetch returned content char cap (>=500)
MAX_WEB_BYTES=2097152 # per-fetch download cap, 2MB (>=65536)
MAX_WEB_LINKS=20 # per-fetch outbound-link cap (>=0)
JINA_READER_BASE="https://r.jina.ai" # override for self-hosted Jina Reader
4 changes: 2 additions & 2 deletions .github/aws-role/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# aws role

```bash
export NAME="lambda-gurumi-ai-bot"
export NAME="lambda-gurumi-bot"
```

## create role
Expand Down Expand Up @@ -44,7 +44,7 @@ aws iam attach-role-policy --role-name "${NAME}" --policy-arn "${POLICY_ARN}"
- name: configure aws credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: "arn:aws:iam::${{ env.AWS_ACCOUNT_ID }}:role/lambda-gurumi-ai-bot"
role-to-assume: "arn:aws:iam::${{ env.AWS_ACCOUNT_ID }}:role/lambda-gurumi-bot"
role-session-name: github-actions-ci-bot
aws-region: ${{ env.AWS_REGION }}

Expand Down
29 changes: 16 additions & 13 deletions .github/aws-role/role-policy.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"cloudformation:DeleteChangeSet",
"cloudformation:DescribeChangeSet"
],
"Resource": "arn:aws:cloudformation:*:*:stack/lambda-gurumi-ai-bot-*"
"Resource": "arn:aws:cloudformation:*:*:stack/lambda-gurumi-bot-*"
},
{
"Sid": "Lambda",
Expand All @@ -47,7 +47,7 @@
"lambda:ListTags"
],
"Resource": [
"arn:aws:lambda:*:*:function:lambda-gurumi-ai-bot-*"
"arn:aws:lambda:*:*:function:lambda-gurumi-bot-*"
]
},
{
Expand All @@ -65,7 +65,7 @@
"iam:UntagRole",
"iam:ListRoleTags"
],
"Resource": "arn:aws:iam::*:role/lambda-gurumi-ai-bot-*"
"Resource": "arn:aws:iam::*:role/lambda-gurumi-bot-*"
},
{
"Sid": "S3",
Expand All @@ -89,10 +89,8 @@
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::lambda-gurumi-ai-bot-*",
"arn:aws:s3:::lambda-gurumi-ai-bot-*/*",
"arn:aws:s3:::gurumi-ai-bot-*",
"arn:aws:s3:::gurumi-ai-bot-*/*"
"arn:aws:s3:::lambda-gurumi-bot-*",
"arn:aws:s3:::lambda-gurumi-bot-*/*"
]
},
{
Expand All @@ -110,7 +108,7 @@
"dynamodb:ListTagsOfResource"
],
"Resource": [
"arn:aws:dynamodb:*:*:table/gurumi-ai-bot-*"
"arn:aws:dynamodb:*:*:table/lambda-gurumi-bot-*"
]
},
{
Expand All @@ -121,11 +119,16 @@
"apigateway:POST",
"apigateway:PUT",
"apigateway:PATCH",
"apigateway:DELETE"
"apigateway:DELETE",
"apigateway:UpdateRestApiPolicy",
"apigateway:GetRestApiPolicy",
"apigateway:DeleteRestApiPolicy"
],
"Resource": [
"arn:aws:apigateway:*::/restapis",
"arn:aws:apigateway:*::/restapis/*"
"arn:aws:apigateway:*::/restapis/*",
"arn:aws:apigateway:*::/tags",
"arn:aws:apigateway:*::/tags/*"
]
},
{
Expand All @@ -141,7 +144,7 @@
"logs:UntagResource",
"logs:ListTagsForResource"
],
"Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/lambda-gurumi-ai-bot-*"
"Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/lambda-gurumi-bot-*"
},
{
"Sid": "S3Vectors",
Expand All @@ -160,8 +163,8 @@
"s3vectors:ListTagsForResource"
],
"Resource": [
"arn:aws:s3vectors:*:*:bucket/gurumi-ai-bot-*",
"arn:aws:s3vectors:*:*:bucket/gurumi-ai-bot-*/index/*"
"arn:aws:s3vectors:*:*:bucket/lambda-gurumi-bot-*",
"arn:aws:s3vectors:*:*:bucket/lambda-gurumi-bot-*/index/*"
]
},
{
Expand Down
5 changes: 4 additions & 1 deletion .github/aws-role/trust-policy.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
},
"StringLike": {
"token.actions.githubusercontent.com:sub": "repo:awskrug/lambda-gurumi-ai-bot:*"
"token.actions.githubusercontent.com:sub": [
"repo:awskrug/lambda-gurumi-bot:*",
"repo:nalbam/lambda-gurumi-bot:*"
]
}
}
}
Expand Down
156 changes: 71 additions & 85 deletions .github/workflows/push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,107 +2,93 @@ name: Deploy to AWS Lambda

on:
push:
branches:
- main
repository_dispatch:
types:
- deploy
workflow_dispatch:
branches: [main]
workflow_dispatch: {}
repository_dispatch: {}

env:
AWS_REGION: "us-east-1"
AWS_ROLE_NAME: "lambda-gurumi-ai-bot"

STAGE: "dev"

FOUNDATION_MODEL: ${{ vars.FOUNDATION_MODEL }}

ALLOWED_CHANNEL_IDS: ${{ vars.ALLOWED_CHANNEL_IDS }}
ALLOWED_CHANNEL_MESSAGE: ${{ vars.ALLOWED_CHANNEL_MESSAGE }}
BOT_CURSOR: ${{ vars.BOT_CURSOR }}
MAX_LEN_BEDROCK: ${{ vars.MAX_LEN_BEDROCK }}
MAX_LEN_SLACK: ${{ vars.MAX_LEN_SLACK }}
MAX_THROTTLE_COUNT: ${{ vars.MAX_THROTTLE_COUNT }}
PERSONAL_MESSAGE: ${{ vars.PERSONAL_MESSAGE }}
REACTION_EMOJIS: ${{ vars.REACTION_EMOJIS }}
SLACK_SAY_INTERVAL: ${{ vars.SLACK_SAY_INTERVAL }}
SYSTEM_MESSAGE: ${{ vars.SYSTEM_MESSAGE }}

AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }}
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_SIGNING_SECRET: ${{ secrets.SLACK_SIGNING_SECRET }}

# Permission can be added at job level or workflow level
permissions:
id-token: write # This is required for requesting the JWT
contents: read # This is required for actions/checkout
id-token: write
contents: read

jobs:
deploy:
runs-on: ubuntu-24.04

steps:
- name: Checkout 🛎️
uses: actions/checkout@v4
with:
fetch-depth: 0
uses: actions/checkout@v5

- name: Setup Python 3.12 🐍
uses: actions/setup-python@v5
- name: Set up Python 🐍
uses: actions/setup-python@v6
with:
python-version: '3.12'
python-version: "3.12"

- name: Install dependencies
run: npm install

- name: Install Python dependencies
run: npx serverless plugin install --name serverless-python-requirements
- name: Set up Node.js 🟢
uses: actions/setup-node@v5
with:
node-version: "24"

- name: Install dotenv plugin
run: npx serverless plugin install --name serverless-dotenv-plugin
Comment thread
nalbam marked this conversation as resolved.
- name: Install Python deps 📦
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install -r requirements-dev.txt

- name: Install dependencies
run: pip install -r requirements.txt
- name: Run tests and check coverage ✅
run: pytest --cov=src --cov-report=term-missing

- name: Set up environment variables 📝
- name: Install Serverless + plugins 🛠️
run: |
echo "FOUNDATION_MODEL=${FOUNDATION_MODEL}" >> .env
echo "ALLOWED_CHANNEL_IDS=${ALLOWED_CHANNEL_IDS}" >> .env
echo "ALLOWED_CHANNEL_MESSAGE=${ALLOWED_CHANNEL_MESSAGE}" >> .env
echo "BOT_CURSOR=${BOT_CURSOR}" >> .env
echo "MAX_LEN_BEDROCK=${MAX_LEN_BEDROCK}" >> .env
echo "MAX_LEN_SLACK=${MAX_LEN_SLACK}" >> .env
echo "MAX_THROTTLE_COUNT=${MAX_THROTTLE_COUNT}" >> .env
echo "PERSONAL_MESSAGE=${PERSONAL_MESSAGE}" >> .env
echo "REACTION_EMOJIS=${REACTION_EMOJIS}" >> .env
echo "SLACK_BOT_TOKEN=${SLACK_BOT_TOKEN}" >> .env
echo "SLACK_SAY_INTERVAL=${SLACK_SAY_INTERVAL}" >> .env
echo "SLACK_SIGNING_SECRET=${SLACK_SIGNING_SECRET}" >> .env
echo "SYSTEM_MESSAGE=${SYSTEM_MESSAGE}" >> .env
npm install -g serverless@3
npm install serverless-python-requirements

- name: configure aws credentials
uses: aws-actions/configure-aws-credentials@v4
- name: Configure AWS credentials (OIDC) 🔑
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: "arn:aws:iam::${{ env.AWS_ACCOUNT_ID }}:role/${{ env.AWS_ROLE_NAME }}"
role-session-name: github-actions-ci-bot
aws-region: ${{ env.AWS_REGION }}
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/lambda-gurumi-bot
Comment thread
nalbam marked this conversation as resolved.
aws-region: us-east-1

- name: Deploy to AWS Lambda 🚀
run: npx serverless deploy --stage ${{ env.STAGE }} --region ${{ env.AWS_REGION }}

- name: Update Bedrock Agent Alias 🔄
run: |
AGENT_ID=$(aws cloudformation describe-stacks \
--stack-name lambda-gurumi-ai-bot-${{ env.STAGE }} \
Comment thread
nalbam marked this conversation as resolved.
--query "Stacks[0].Outputs[?OutputKey=='AgentId'].OutputValue" \
--output text)
ALIAS_ID=$(aws cloudformation describe-stacks \
--stack-name lambda-gurumi-ai-bot-${{ env.STAGE }} \
--query "Stacks[0].Outputs[?OutputKey=='AgentAliasId'].OutputValue" \
--output text)

aws bedrock-agent update-agent-alias \
--agent-id "${AGENT_ID}" \
--agent-alias-id "${ALIAS_ID}" \
--agent-alias-name live \
--region ${{ env.AWS_REGION }}
Comment thread
nalbam marked this conversation as resolved.
env:
# --- secrets: Slack ---
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_SIGNING_SECRET: ${{ secrets.SLACK_SIGNING_SECRET }}
# --- secrets: LLM provider keys ---
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
XAI_API_KEY: ${{ secrets.XAI_API_KEY }}
# --- secrets: Web search ---
TAVILY_API_KEY: ${{ secrets.TAVILY_API_KEY }}
# --- vars: LLM / Image ---
IMAGE_MODEL: ${{ vars.IMAGE_MODEL }}
IMAGE_PROVIDER: ${{ vars.IMAGE_PROVIDER }}
LLM_MODEL: ${{ vars.LLM_MODEL }}
LLM_PROVIDER: ${{ vars.LLM_PROVIDER }}
# --- vars: Agent behavior ---
AGENT_MAX_STEPS: ${{ vars.AGENT_MAX_STEPS }}
MAX_OUTPUT_TOKENS: ${{ vars.MAX_OUTPUT_TOKENS }}
RESPONSE_LANGUAGE: ${{ vars.RESPONSE_LANGUAGE }}
# --- vars: Slack UX ---
BOT_CURSOR: ${{ vars.BOT_CURSOR }}
MAX_LEN_SLACK: ${{ vars.MAX_LEN_SLACK }}
SYSTEM_MESSAGE: ${{ vars.SYSTEM_MESSAGE }}
PERSONA_MESSAGE: ${{ vars.PERSONA_MESSAGE }}
# --- vars: Access control / throttle ---
ALLOWED_CHANNEL_IDS: ${{ vars.ALLOWED_CHANNEL_IDS }}
ALLOWED_CHANNEL_MESSAGE: ${{ vars.ALLOWED_CHANNEL_MESSAGE }}
ALLOWED_USER_IDS: ${{ vars.ALLOWED_USER_IDS }}
ALLOWED_USER_MESSAGE: ${{ vars.ALLOWED_USER_MESSAGE }}
MAX_THROTTLE_COUNT: ${{ vars.MAX_THROTTLE_COUNT }}
# --- vars: Storage ---
MAX_HISTORY_CHARS: ${{ vars.MAX_HISTORY_CHARS }}
# --- vars: Observability ---
LOG_LEVEL: ${{ vars.LOG_LEVEL }}
# --- vars: Document / time ---
DEFAULT_TIMEZONE: ${{ vars.DEFAULT_TIMEZONE }}
MAX_DOC_BYTES: ${{ vars.MAX_DOC_BYTES }}
MAX_DOC_CHARS: ${{ vars.MAX_DOC_CHARS }}
MAX_DOC_PAGES: ${{ vars.MAX_DOC_PAGES }}
# --- vars: Web fetch ---
JINA_READER_BASE: ${{ vars.JINA_READER_BASE }}
MAX_WEB_BYTES: ${{ vars.MAX_WEB_BYTES }}
MAX_WEB_CHARS: ${{ vars.MAX_WEB_CHARS }}
MAX_WEB_LINKS: ${{ vars.MAX_WEB_LINKS }}
run: npx serverless deploy --stage dev --region us-east-1
Loading