AI prompts
base on Bunge Bits provides convenient summaries of Kenyan National Assembly and Senate sittings, making legislative information more accessible and digestible. <p align="center">
<img src="./logo.png" alt="bunge-bits logo" />
</p>
# Bunge Bits
[](https://github.com/c12i/bunge-bits/actions/workflows/rust-and-ui-checks.yml)
Bunge Bits provides convenient summaries of Kenyan National Assembly and Senate proceedings, making legislative information more accessible and digestible.
## Motivations
The driving force behind Bunge Bits is to strengthen Kenya's democracy by making legislative processes more transparent and understandable to all citizens. The aim is to bridge the gap between complex government proceedings and the average Kenyan, fostering increased civic engagement and political awareness. By offering concise, easy-to-digest summaries of legislative sessions, I hope to empower citizens with the knowledge they need to participate more fully in their democracy, hold elected officials accountable, and engage in informed discussions about the issues that affect their lives.
Ultimately, Bunge Bits seeks to contribute to a more engaged, informed, and participatory democratic process in Kenya.
## Development Progress
- [x] `ytInitialData` parser: Parsing logic that parses scraped data from youtube
- [x] `stream_datastore`: ~Sqlite~ Postgres database bindings for storing, retrieving and modifying stream data
- [x] `yt-dlp` bindings: Bindings to interact with the yt-dlp cli as well as some utilities to interact with video and vtt data
- [x] `ffmpeg` bindings: Bindings to complement the Ytdlp bindings for the purpose of processing audio
- [x] `stream_pulse_cron`: A cron job that periodically fetches and processes streams
- [x] ~`stream_digest`: Functions that make it possible to efficiently process transcripts in chunks~ **DEPRECIATED** [#29](https://github.com/c12i/bunge-bits/issues29)
- [x] Manual publish flag – `is_published` field added to each stream for editorial control. Yes it sucks, but it's necessary for now since LLMs don't seem to get everything 100% right. Only a temporary step for now though.
- [x] Web App: The end user interface that will display the summarized content [#3](https://github.com/c12i/bunge-bits/issues/3)
## Deferred
- [ ] Email Newsletter – Periodic delivery of new summaries to subscribers - Using RSS Feed for now
## Development Setup
### Component Setup
- [`stream_pulse`](./crates/stream_pulse/README.md#development-setup)
- [`stream_datastore`](./crates/stream_datastore/README.md)
- [`ui`](./ui/README.md)
## Contribution
See the [contribution guideline](./CONTRIBUTING.md).
## Related Posts
- [Building bunge-bits, an AI-Powered Summary Pipeline for the Parliament of Kenya](https://collinsmuriuki.xyz/building-bunge-bits/)
- [Show HN: A Tool to Summarize Kenya's Parliament with Rust, Whisper, and LLMs](https://news.ycombinator.com/item?id=44348649)
## Support the Project
Your support helps cover:
- Cloud hosting and database infrastructure
- OpenAI Whisper + GPT 4o API usage
Sponsorship is available via [GitHub Sponsorship](https://github.com/sponsors/c12i) or [support via alternative cash and crypto options](https://support-bungebits.c12i.xyz). Every bit helps to keep Kenyan legislative content accessible to all.
", Assign "at most 3 tags" to the expected json: {"id":"14099","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"