Siya Goel Medhya Goel Andreas Lorgen J Yim
This branch includes an initial image-aware chatbot app.
- Install dependencies:
pip install -r requirements.txt - Set your OpenAI key:
export OPENAI_API_KEY="your_key_here" - Start the app:
streamlit run chatbot_app.py
- Upload one or more images.
- Ask natural-language questions about those uploaded images.
- Returns an answer grounded in the visible content (or says when evidence is uncertain).
This repo also contains a React Native (Expo Router) client under app/. It does not replace the Streamlit prototype above; they are separate entrypoints.
- Use Node 20+ (see
package.jsonenginesand optional.nvmrc). npm install- Copy
.env.exampleto.envand set:EXPO_PUBLIC_SUPABASE_URLEXPO_PUBLIC_SUPABASE_ANON_KEY
npm start, then open in Expo Go, or pressi/a/wfor simulator / web.
- Make sure that XCode and iOS simulators are installed on your Mac. You must also be added as an owner in the expo account associated with the build.
- Use Node 20+ (see
package.jsonenginesand optional.nvmrc). npm install- Copy
.env.exampleto.envand set:EXPO_PUBLIC_SUPABASE_URLEXPO_PUBLIC_SUPABASE_ANON_KEY
- In one terminal, run
npx expo start. - In another terminal, run
npx eas-cli@latest build --platform ios --profile ios-simulatorand then open the simulator by runningopen -a Simulator.
Search and light “clustering” for the Library tab (app/(tabs)/archive.tsx) live in lib/archiveSearchAndCluster.ts. Data is on-device unless teammates wire the integration hooks in lib/teamIntegrationPlaceholders.ts.
| Piece | Behavior |
|---|---|
| Index | Bundled images in assets/files plus user uploads copied under the app document directory. |
| Query | Query string is tokenized; every token must appear somewhere in the item’s searchBlob (AND semantics), not one long substring. |
| searchBlob | Lowercased join of id, file name, auto-tags, theme, and optional supplemental text (for future OCR/captions). |
| Auto-tags | Inferred from the file name (with stopwords); stored in venn-archive-item-meta.json. |
| Theme chips | Coarse keyword buckets (e.g. food, travel)—not embedding-based clusters. |
| Ranking | Among matches, file name and tag hits score above weak blob-only hits; sort by score, then file name. |
| Match hints | While searching, a tile may show short labels (e.g. “File name”, “Tag”) for transparency. |
| Vision / OCR | Off by default. When enabled, text from placeholder_extractSearchableTextFromImage merges into the same index via lib/archiveSupplementalSearchText.ts. |
| Backend | lib/teamIntegrationPlaceholders.ts defines no-op hooks for Supabase tags, embedding themes, index push, chat, and vision—flip flags and implement when ready. |
The Action tab is a placeholder chat UI for future generative features; it does not use chatbot_app.py.