AI Knowledge Base

Logo

Knowledge base of AI resources for GWSB.

View the Project on GitHub jphall663/gwsb_caio

Public Syllabus Research

This command-line Python application discovers, retrieves, verifies, compares, and exports public course syllabi and detailed outlines. It is designed for a VS Code terminal and produces an Excel workbook, not a web interface.

The default profile researches a conceptual, application-focused LLM course for master’s students in business analytics. Discovery uses the OpenAI Responses API hosted web_search tool. The application then retrieves the cited HTML/PDF materials itself and analyzes that local evidence; it does not treat a search summary as verification. The implementation follows the official OpenAI documentation for Responses, web search, and reasoning models.

Set up in VS Code

From the repository root:

python3 -m venv syllabus_research/.venv
source syllabus_research/.venv/bin/activate
python -m pip install -e 'syllabus_research[test]'

Keep the working directory at the repository root so the application can reuse shared/. Put the API key in the repository-root .env file:

OPENAI_API_KEY=...

The app reads a basic KEY=VALUE file itself. It does not overwrite variables already exported by VS Code or the shell. .env and generated run directories are ignored by Git. See .env.example for optional model/retry settings.

Run

Activate the environment, then run a normal research job:

syllabus-research

For a low-cost live smoke run:

syllabus-research --max-candidates 2

Each run creates runs/<UTC timestamp>/ containing:

Normal discovery is split into configurable batches and uses strict Responses API JSON Schema. Each raw batch response is saved before parsing, so an incomplete or malformed batch is recorded and the remaining batches can continue instead of losing the whole discovery run.

Resume an interrupted run without repeating completed stages:

syllabus-research --resume syllabus_research/runs/20261015T180000Z

Retrieval and analysis failures are recorded per source/course and the run continues. API calls and retrieval retries are bounded. The workbook reports an honest shortfall when fewer than the configured minimum qualify; the selector does not silently relax its rules.

Edit sources and research profiles

Edit the default profile, or copy it and pass the copy with --profile path/to/profile.json. The JSON controls:

An explicit inclusion bypasses normal selection criteria but is visibly flagged when it falls outside them. Undated candidates stay unresolved. Course dates must be supported by a course term or explicit publication/update statement; copyright and retrieval dates do not qualify. To create a broader business-school AI profile, copy the file and replace its topics, audience, seed_sources, and selection criteria.

Interpret the workbook

Responsible-use coverage remains visible in the matrix but is marked as covered in another class. Retrieved content is treated as untrusted data, not as instructions. The retriever uses ordinary public HTTP access and does not bypass authentication, paywalls, robots challenges, or other access controls.

Shared OpenAI client compatibility

shared.llms.openai_client.gpt_complete() remains a Chat Completions wrapper and retains its return type and parameter shape. The new additive gpt_response() helper enables Responses API models, reasoning effort, built-in tools, and output-token limits. Credentials are resolved from the existing shared.config.API_KEY setting or OPENAI_API_KEY; no repository-wide caller migration is required. The client is now lazy when no key is present, so importing it for tests or local-only tasks does not require credentials.

Test

source syllabus_research/.venv/bin/activate
pytest syllabus_research/tests

Tests use local fixtures and fake API clients. They do not consume API credits. Live results are always written under ignored runs/ directories and are distinct from fixtures under tests/.

License

This software is licensed under the MIT License used by the rest of the repository. See LICENSE and the repository-level SOFTWARE_LICENSE.