--- title: LineChatbot emoji: 💬 colorFrom: pink colorTo: purple sdk: docker app_port: 7860 pinned: false --- # LineChatbot A Streamlit chat app that role-plays a conversation partner using the Claude API, with optional persona/relationship analysis from an uploaded LINE chat export. This README's YAML header configures it as a **Docker** Hugging Face Space. ## How access works - **Passkey gate** — if the `APP_PASSKEY` secret is set, visitors must enter it to use the app. Share the passkey with whoever you want to let in. - **API key** — if the `ANTHROPIC_API_KEY` secret is set, everyone who passes the passkey gate uses *your* key automatically. If it is **not** set, each visitor is asked to paste their own Anthropic key (kept only in their session, never saved). - **Per-user isolation** — every browser session gets its own data directory, so visitors never see or overwrite each other's conversations. ## Deploy to Hugging Face Spaces 1. Create a Space: → **SDK: Docker** → blank. 2. Push **this folder** (`romance-chatbot/`) as the Space repo root. The 1.1 GB `model.pt` checkpoint must go through Git LFS (`.gitattributes` already tracks `*.pt`): ```bash cd LineChatbot git init git lfs install git remote add origin https://huggingface.co/spaces// git add . git commit -m "Deploy LineChatbot" git push origin main ``` 3. In the Space: **Settings → Variables and secrets**, add: - `APP_PASSKEY` = the shared passkey you'll hand out (recommended). - `ANTHROPIC_API_KEY` = your Claude key *(optional — omit to make each visitor supply their own)*. - `CHAT_MODEL` *(optional, default `claude-haiku-4-5`)*. 4. The Space builds the Docker image and gives you a shareable URL. First use of the persona analysis / summarizer downloads the local models (a few GB) once. > Free CPU hardware works but the local models are slow on first use. Personality/ > emotion analysis runs once at setup; summarization runs every 20 messages. ## Run locally ```bash cd romance-chatbot pip install -r requirements.txt # torch CPU/GPU per your platform export ANTHROPIC_API_KEY=sk-ant-... # or paste it in the UI # export APP_PASSKEY=letmein # optional gate streamlit run core/app.py ``` ## Configuration (env vars / Space secrets) | Variable | Required | Purpose | |---------------------|----------|----------------------------------------------------------------| | `APP_PASSKEY` | no | Shared passkey gate. Unset = no gate. | | `ANTHROPIC_API_KEY` | no | Server-side Claude key. Unset = visitors paste their own. | | `CHAT_MODEL` | no | Claude model id (default `claude-haiku-4-5`). | | `MAX_OUTPUT_TOKENS` | no | Max reply length (default 256). |