AI prompts
base on Human-AI collaboration to produce a newstory about a meeting from minutes or transcript # meeting_reporter
Code, samples, and a working streamlit app for demonstrating:
1. multiagent and human collaboration
2. the use of langgraph to coordinate the interaction
3. the mating of the langgraph and streamlit state machines (non-trivial)
The agents are prompted to create a newsstory in collaboration with a human(you)from a meeting transcript or minutes which you either provide a URL to or upload. The input agent uploads or downloads the document as appropriate and extracts text from it; the writer agent drafts; the critique agent critiques; you can edit either the draft or the critique. the cycle continues until you are satisfied with a draft at which point it ia giiven to the output agent to display.
This concept could easily be extended to different types of news stories as well as different sources ands could include fact checking, RAG from an archive etc.
I started with meetings because there are many more public meetings than there are reporters to cover them.
## overview
[langgraph](https://github.com/langchain-ai/langgraph)is a library for building stateful, multi-actor applications with LLMs, built on top of (and intended to be used with) LangChain. It is low-code but not no-code.
The depository is set up so that an application can be uploaded to the Streamlit cloud. That has been done and the application is [here](https://meeting-reporter.streamlit.app/). The .gitignore and requirements.txt are specific to streamlit cloud.
mm_agent.py in this repository contains the main logic and all of the langchain speciifc code for the application. If you run it as a main program in your own Python environment, it will use tkinter rather than streamlit for UI.
mm_st.py is the main program of the streamlit version and contains all the streamlit specific logic
mytools.py are a few miscellaneous uilities of mine.
mm_tkinter.py contains the tkinter specific code. It is not used in the streamliit version.
## usage
### as a streamlit app:
Click the URL https://meeting-reporter.streamlit.app/. You will need an OPENAI api key in the paid tier. The free api key will not work because the agents use GPT4.
### as a basis for deploying your own Streamlit app.
1. clone the repository.
2. make any changes you want to make.
3. be sure to update .gitignore and requirements.txt as needed.
4. deploy from Streamlit (you need an acount, of course).
### in a Python environment
1. download the mm_agent, mytools, and mm_tkinter modules
2. Set up a .env file with an entry for OPENAI_API_KEY set equal to your paid OpenAI key or otherwise set an environmental variable with that name
3. Run mm_agent.py.
### as a custom GPT (no api key or paid subscription required)
click the URL https://chatgpt.com/g/g-roNR24Ty6-collaborative-meeting-reporter.
## ideas for enhancement
1. Select a prompt depending on the content of the source
2. Incorporate fact checking via browsing
3. Include a process for improving the prompts based on frequent critiqes
4. add sources and stories to a database (a morgue in news terms)
5. use RAG to consult the morgue and get background
6. embed in a larger collaborative newsroom process
7. acccept audio files for input
8. incorporate graphics
pull requests welcome
## privacy
No code here explititly collects any information of any kind. However, some usage stastics are available from both github and Streamlit.
## disclaimer
This all comes with no warranty of any kind nor any promise to fix problems or maintain compatabity with the code it uses. However, bug reports, issues, and enhancement pull requests are welcome.
", Assign "at most 3 tags" to the expected json: {"id":"10622","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"