This is a small standalone web app that crawls Oracle Generative AI imported-model documentation, extracts supported model rows, and exposes them through a searchable website.
It is intentionally scoped to Oracle imported-model documentation only:
- Root page:
https://docs.oracle.com/en-us/iaas/Content/generative-ai/imported-models.htm - Imported-model family pages discovered dynamically from that root page
The app does not search the open web. It only:
- Fetches the Oracle imported-model landing page
- Recursively follows Oracle imported-model subpages under the same Generative AI docs path
- Extracts model table rows from those pages
- Filters and displays the results in the browser
Pages that do not produce at least one extracted model row are not shown in the UI.
- Fetches Oracle's imported-model catalog pages on the server side
- Recursively crawls imported-model subpages linked from the Oracle root page
- Extracts model families and supported imported-model rows
- Displays only pages that contain at least one extracted model
- Lets you search by family, model ID, capability, or recommended shape
- Supports wildcard queries such as
qwen*and looser relative-term matches such asllmaforllama - Shows the crawled Oracle subpage list in the UI so coverage is visible
- Removes duplicate model entries and adds a Hugging Face link for each model id when available
- Lets you switch the UI between
greyanddarkthemes - Caches results in memory for six hours unless you hit refresh
- Requires a login before serving the application or model API
- Avoids npm and third-party Python dependencies
The search box supports:
- Exact substring matching
- Prefix matching
- Wildcards such as
qwen*,*vision*, ormeta-* - Lightweight fuzzy and relative-word matching such as
llma->llama
Search runs against:
- Family/page title
- Oracle docs page URL
- Table section heading
- Model ID
- Capability text
- Recommended shape
The browser UI includes:
- A single search bar shared across the Oracle imported-model catalog
- A
Refresh from Oracle Docsaction to bypass the in-memory cache - Theme switching between
greyanddark - A
Crawled Oracle subpagessection so you can verify which Oracle pages produced model results - One card per imported-model family page
- A Hugging Face link for each model when the extracted model ID looks like a valid Hugging Face repo path
The app serves one JSON API endpoint:
GET /api/models
Query parameters:
q: optional search queryrefresh=1: force a fresh crawl instead of using the cached catalog
Example:
http://127.0.0.1:8080/api/models?q=qwen*&refresh=1
Response fields include:
source_urlgenerated_atpage_countcrawled_pagesfamily_countmodel_countfamiliesmodels
app.py: HTTP server, Oracle crawler, extraction logic, search filtering, and JSON APIstatic/index.html: page structurestatic/app.js: browser-side rendering, theme toggle, and search interactionstatic/styles.css: UI stylingstart.sh: local launcherrequirements.txt: stable dependency entry point, currently standard-library only
Preferred:
cd ./customimport
bash start.shManual:
cd ./customimport
python3 app.pyThe launcher:
- creates
.venvif needed - upgrades
pip - installs
requirements.txt - starts the local server
Then open:
http://127.0.0.1:8080
Optional environment variables:
PORT=8090 HOST=0.0.0.0 python3 app.pyThe app requires a username and password. Configure them with environment variables:
APP_USER_NAME=my-user APP_PASSWORD='My-Strong-Passphrase!' python3 app.pyAPP_USER_NAMEdefaults toociwhen unset or empty.APP_PASSWORDis generated as a complex 16-character value when unset or empty.- A generated password is printed once to the application console at startup; save it from the logs before signing in.
- The
GET /api/healthendpoint remains unauthenticated for container health checks.
If you prefer to bootstrap the virtual environment yourself:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python app.py- The scraper depends on the Oracle docs HTML structure. If Oracle changes the page layout, extraction logic in
app.pymay need adjustment. - Search is intentionally basic and limited to the imported-model docs content, not the open web.
- Query matching supports exact, prefix, wildcard, and lightweight fuzzy token matching.
- Duplicate rows are removed before rendering, using model ID plus capability plus recommended shape as the effective uniqueness key.
- Pages with no extracted models are intentionally filtered out of both the page list and the family card list.
- Some family pages may temporarily fail to load or parse. The UI shows those failures inline per family instead of hiding them.