nikeshn commited on
Commit
a585654
·
verified ·
1 Parent(s): 41fe3fc

Upload 5 files

Browse files
Files changed (5) hide show
  1. .gitattributes +35 -35
  2. Dockerfile +11 -11
  3. README.md +37 -0
  4. app.py +3 -3
  5. requirements.txt +0 -4
.gitattributes CHANGED
@@ -1,35 +1,35 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
Dockerfile CHANGED
@@ -1,11 +1,11 @@
1
- FROM python:3.9-slim
2
-
3
- WORKDIR /app
4
-
5
- COPY requirements.txt .
6
- RUN pip install --no-cache-dir -r requirements.txt
7
-
8
- COPY . .
9
-
10
- # HF Spaces requires port 7860
11
- CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
 
1
+ FROM python:3.9-slim
2
+
3
+ WORKDIR /app
4
+
5
+ COPY requirements.txt .
6
+ RUN pip install --no-cache-dir -r requirements.txt
7
+
8
+ COPY . .
9
+
10
+ # HF Spaces requires port 7860
11
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
README.md CHANGED
@@ -43,3 +43,40 @@ Set these in the Space **Settings → Variables and Secrets**:
43
  ## Version
44
 
45
  **v3.7** — Navigation-first agentic AI. See GitHub for changelog.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  ## Version
44
 
45
  **v3.7** — Navigation-first agentic AI. See GitHub for changelog.
46
+
47
+ ## Architecture (v3.8)
48
+
49
+ The pipeline is split by stage under `src/agentcore/` - each module's docstring
50
+ explains its role:
51
+
52
+ | Module | Role |
53
+ |---|---|
54
+ | `models.py` | Pydantic I/O contracts |
55
+ | `constants.py` | Regexes, URLs, prompts (no logic) |
56
+ | `utils.py` | Shared helpers, LLM factory, query/URL builders |
57
+ | `classify.py` | Rule pre-classifier + LLM intent classifier |
58
+ | `libcal.py` | Live hours/events via Cloudflare Worker proxy |
59
+ | `scholarly.py` | OpenAlex, Semantic Scholar, Crossref, Unpaywall clients |
60
+ | `rendering.py` | HTML fragments (badges, trace blocks, AI-tools footer) |
61
+ | `intents_library.py` | library_info handlers |
62
+ | `intents_search.py` | search_academic / search_medical machinery |
63
+ | `intents_general.py` | general / social handlers |
64
+ | `orchestrator.py` | Injection gate, routing pipeline, analytics logging |
65
+
66
+ `src/api/agent.py` is a thin router. Tests: `pytest tests/ -q` (20 tests, no
67
+ API keys required).
68
+
69
+ ## Environment variables (new in v3.8)
70
+
71
+ | Variable | Purpose |
72
+ |---|---|
73
+ | `CLOUDFLARE_WORKER_TOKEN` | Bearer token for the Worker analytics surface; must equal the Worker's `ANALYTICS_TOKEN` secret |
74
+ | `CONTACT_EMAIL` | Polite-pool contact sent to OpenAlex / Unpaywall / Crossref (default `library@ku.ac.ae`) |
75
+
76
+ ## Privacy
77
+
78
+ Before any query reaches metrics or the D1 analytics store it passes
79
+ `_redact_for_analytics`: e-mail addresses and digit runs of 6+ are masked and
80
+ text is truncated to 200 characters. Answer excerpts logged for the daily
81
+ relevance agent get the same treatment. The Worker applies the identical
82
+ redaction server-side as defence in depth.
app.py CHANGED
@@ -26,7 +26,7 @@ try:
26
  except ImportError:
27
  _ttl_cache_available = False
28
 
29
- from src.config import get_settings
30
  from src.services.cache_service import CacheService
31
  from src.services.metrics_service import MetricsService
32
  from src.services.rag_service import RAGService
@@ -124,7 +124,7 @@ async def lifespan(app: FastAPI):
124
  app = FastAPI(
125
  title="LibBee - KU Library AI",
126
  description="Khalifa University Library AI Assistant",
127
- version="3.5.0",
128
  lifespan=lifespan,
129
  )
130
 
@@ -261,7 +261,7 @@ def health_check():
261
  settings = get_settings()
262
  return {
263
  "status": "ok",
264
- "version": "3.5.0",
265
  "service": "LibBee KU Library AI",
266
  "rag_ready": rag_service.is_ready(),
267
  "maintenance_mode": settings.maintenance_mode,
 
26
  except ImportError:
27
  _ttl_cache_available = False
28
 
29
+ from src.config import get_settings, LIBBEE_VERSION
30
  from src.services.cache_service import CacheService
31
  from src.services.metrics_service import MetricsService
32
  from src.services.rag_service import RAGService
 
124
  app = FastAPI(
125
  title="LibBee - KU Library AI",
126
  description="Khalifa University Library AI Assistant",
127
+ version=LIBBEE_VERSION,
128
  lifespan=lifespan,
129
  )
130
 
 
261
  settings = get_settings()
262
  return {
263
  "status": "ok",
264
+ "version": LIBBEE_VERSION,
265
  "service": "LibBee KU Library AI",
266
  "rag_ready": rag_service.is_ready(),
267
  "maintenance_mode": settings.maintenance_mode,
requirements.txt CHANGED
@@ -11,10 +11,6 @@ anthropic>=0.34.0
11
  faiss-cpu>=1.7.4
12
  rank-bm25>=0.2.2
13
  httpx>=0.25.0
14
- slowapi>=0.1.9
15
- bcrypt>=4.1.2
16
- passlib>=1.7.4
17
- python-jose[cryptography]>=3.3.0
18
  numpy>=1.26.0
19
  openai>=1.40.0
20
  cachetools>=5.3.0
 
11
  faiss-cpu>=1.7.4
12
  rank-bm25>=0.2.2
13
  httpx>=0.25.0
 
 
 
 
14
  numpy>=1.26.0
15
  openai>=1.40.0
16
  cachetools>=5.3.0