Giter VIP home page Giter VIP logo

auto-scheduler's Introduction

Banner

๐Ÿ LLM powered autoscheduler - CSUS DS Club

Tested and developed using Python 3.11.5!

The LLM-based Autoscheduler is a project developed by the Data Science Club at CSUS, aiming to provide an automated scheduling system for students. ๐Ÿ“… The project comprises three main components:

  1. Scraper ๐Ÿ•ต๏ธโ€โ™‚๏ธ
  2. LLM API Connection ๐Ÿค–
  3. User Interface Application ๐Ÿ’ป

1. Scraper ๐Ÿ•ต๏ธโ€โ™‚๏ธ

โš ๏ธ Important: The included chromium engine ONLY runs on ARM MacOS (Apple silicon chips). If your system is different, you can find the appropiate version in Chrome for Testing โš ๏ธ
The scraper is a Python-based module that retrieves class schedule data from the CSUS webpage. It utilizes Selenium and BeautifulSoup to navigate the website, render dynamic content, and parse the HTML structure.

The scraper performs the following tasks:

  • Retrieves the rendered HTML content of the class schedule page.
  • Parses the HTML structure using BeautifulSoup to extract relevant data.
  • Stores the extracted data in a structured format (JSON) for further processing.

2. LLM API Connection ๐Ÿค–

The LLM (Large Language Model) API Connection module establishes a connection with a language model API, in this case OpenAI GPT-3.5. This module is responsible for sending prompts to the LLM and receiving the generated responses.

The LLM API Connection module performs the following tasks:

  • Authenticates with the LLM API service using provided credentials.
  • Formats and sends prompts to the LLM API, including the extracted class schedule data.
  • Receives and processes the generated responses from the LLM.
  • Applies any necessary post-processing or formatting to the LLM responses.

3. User Interface Application ๐Ÿ’ป

The User Interface Application provides a graphical interface for users to interact with the LLM-based Autoscheduler. It acts as a bridge between the user and the underlying scraper and LLM API Connection components. It's build using the fantastic library streamlit.io, which provides a clean-looking UI on top of Python apps.

The User Interface Application offers the following features:

  1. A user-friendly interface for inputting preferences and constraints for scheduling (e.g., desired courses, time preferences, workload limitations).
  2. Integration with the scraper module to retrieve the latest class schedule data from the scraped JSON files.
  3. Integration with the LLM API Connection module to send prompts and receive generated schedules from the LLM.
  4. Display of the generated schedules in a clear and organized manner.

Getting Started! ๐ŸŽ‰

To see the LLM-based Autoscheduler project in action, follow these steps:

  1. Clone the repository: git clone https://github.com/yourusername/llm-based-autoscheduler.git
  2. Install the required dependencies. pip install -r dependencies.txt
  3. Configure the necessary API keys and credentials for the OpenAI API. (Tutorial)
  4. Select the term in the the scraper/scraper.py code.
  5. Run the scraper python3 scraper.py to generate the file schedules/{term}.json/.
  6. Go into the folder containing the streamlit app cd streamlit.
  7. Run the app with streamlit run app.py.
  8. Access the app at http://localhost:8501.

Contributing ๐Ÿค

Contributions to the LLM-based Autoscheduler project are welcome! If you'd like to contribute, please follow these steps:

  1. Fork the repository
  2. Create a new branch: git checkout -b my-new-feature
  3. Make your changes and commit them: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request

License

This project is licensed under the MIT License. ๐Ÿ“œ

auto-scheduler's People

Contributors

alemalvarez avatar

Stargazers

 avatar  avatar Aaron Shackelford avatar

Watchers

 avatar

auto-scheduler's Issues

Draw a calendar with the LLM output

Is your feature request related to a problem? Please describe.
The LLM outputs markdown, and it is not super easy to visualize.

Describe the solution you'd like
I want the program to output some kind of table-calendar.

Describe alternatives you've considered
Keep it in plain text but adjust the format maybe?

Prompt Engineer the Scheduling Request!

The file api_notebook.ipynb contains a first draft of a prompt and instructions. It works, but it can certainly get better!
We need to optimize a prompt that hallucinates as least as possible. You can either try in your local machine and post the suggestion here, or try it in the notebook and submit a pull request.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.