The development of the GenAI Document Assistant is slow progress but now I have a working front end that allows you to ask questions and upload new data for the model to work alongside.
One of the biggest hurdles is not the LLM or RAG but unstructured data that is being loaded from a .PDF file.
The variability of PDF formats makes looking for structural markers complex and hard to extract and organise the data in a way that will be useful for retrieval and generation. It is probably the most tricky problem to solve, "Text Extraction and Parsing Challenges":-
☉ Complex Layouts: Many applications allow the user to export to PDF which means PDFs can include many different thing like, tables, images, multi-column layouts, and irregular formatting, which make it hard to extract text in the correct reading order.This is somewhat achieved with the Spring PagePdfDocumentReader class.
☉ Loss of Structure: Unlike formats like HTML, PDFs often lack structure tags (such as headers, paragraphs, lists). Extracting coherent segments from PDFs may require advanced parsing techniques, but I expect this issue to be resolved.
☉ Embedded Fonts and Encodings: Some PDFs use custom fonts or encodings, which can result in missing characters or strange symbols after extraction, making the text nonsensical or incomplete. This is somewhat achieved with the Spring PagePdfDocumentReader class.
With that in mind it will take a while for me to enhance the Spring's PDF document reader or perhaps more research in how to make data a good fit for retrieval and generation.
When dealing with RAG, there is a requirement to upload files to the "model" should you wish to have specific content added. This can be achieved using the process flow as per the diagram.
This process allows you to extract data from a PDF, break it up into chunks of text, tokenise each junk and once all the chunks have been tokenised you then pass it to a process to store the data into database. But before you actually store the data you then create an embedding vector of the data, this is the magic part, where the embedding client creates a vector of the data so it is easier to retrieve later.
The diagram shown, describes the different technology I have used.
I took the Spring AI Demo from Oracle, and extended it to be an offline chat bot. I created a front end to allow the user to input a question and also allowed the user to add more PDF documents.
Using Spring AI brings in some nice features that makes the whole development process a nicer experience.
AI - ChatGPT try out.
Below is an example of what ChatGPT can do!
Prompt : Create a blog post titled "The Top 10 software ideas to date"
The Top 10 Software Ideas to Date
In the ever-evolving landscape of technology, software development has revolutionized countless industries, from communication to healthcare, finance, and beyond. Certain ideas in software have proven transformative, sparking new business models, reshaping user experiences, and advancing global progress. Below is a list of the top 10 software ideas to date, which have left a lasting impact on both society and technology.
1. The Internet Browser
The internet browser revolutionized how humans interact with information. Starting with the introduction of Mosaic in 1993, which eventually led to the dominance of browsers like Netscape, Internet Explorer, Chrome, and Firefox, the internet browser made the World Wide Web accessible to everyone. The browser allowed users to access information, media, and communication tools, sparking the growth of e-commerce, social media, and much more.
2. Cloud Computing
Cloud computing changed the game for businesses and individuals alike. Before cloud solutions, companies had to rely on expensive, locally hosted servers. Amazon Web Services (AWS), Google Cloud, and Microsoft Azure made it possible to scale IT infrastructure on demand, leading to faster development cycles and cost-effective solutions. The cloud enables everything from SaaS (Software as a Service) applications to scalable storage and computing resources, removing traditional barriers to tech innovation.
3. Open-Source Software
Open-source software, including projects like Linux, Apache, and Mozilla, completely redefined software development. It allowed developers worldwide to contribute to, improve, and share code, driving innovation while lowering costs. Many modern platforms and apps rely heavily on open-source foundations, proving that a collaborative approach to software creation can be incredibly powerful.
4. Mobile Operating Systems
Apple’s iOS and Google’s Android revolutionized personal computing by bringing the power of the internet to the palm of your hand. With the launch of the iPhone in 2007 and Android soon after, mobile operating systems created a new ecosystem of apps, forever changing how people communicate, work, and entertain themselves. Today, mobile apps control everything from banking to fitness, all thanks to these pioneering mobile OS platforms.
5. Artificial Intelligence and Machine Learning Frameworks
The field of artificial intelligence (AI) has made tremendous strides in recent decades, but the development of accessible machine learning (ML) frameworks like TensorFlow, PyTorch, and scikit-learn made it possible for developers across the world to implement AI-driven solutions. These frameworks have been critical in building systems for personalized recommendations, predictive analytics, autonomous vehicles, and natural language processing (NLP), among other applications.
6. Relational Database Management Systems (RDBMS)
The invention of relational databases revolutionized the way data is stored and accessed. Edgar F. Codd’s relational model for database management gave birth to SQL-based systems like Oracle, MySQL, and PostgreSQL. These systems became the backbone for most business applications and web platforms by providing structured and efficient data management, supporting everything from banking systems to e-commerce platforms.
7. Version Control Systems
Version control systems, like Git, introduced a new era of collaboration in software development. Git, created by Linus Torvalds in 2005, became the most popular system, allowing teams of developers to work together, track changes, and roll back errors efficiently. The advent of platforms like GitHub and GitLab further amplified the impact, making open-source collaboration easier and more widespread.
8. Blockchain Technology
Blockchain technology, introduced through Bitcoin in 2008, transformed the way people think about decentralization and security in digital transactions. Its decentralized ledger system promises transparent, immutable records without the need for central authorities. Blockchain has since expanded beyond cryptocurrencies, with applications in industries ranging from finance to supply chain management, healthcare, and beyond.
9. Virtualization and Containerization
Virtualization (e.g., VMware) and containerization (e.g., Docker, Kubernetes) revolutionized the deployment and scalability of software applications. Virtual machines enabled the sharing of computing resources across multiple applications, while containers allowed developers to package and deploy software efficiently across different environments. These technologies have become crucial in modern DevOps practices, significantly improving how software is built, tested, and deployed.
10. Social Media Platforms
The software behind social media platforms like Facebook, Twitter, Instagram, and LinkedIn has changed the way the world communicates. It has reshaped human interaction, allowed for the creation of online communities, and given rise to new forms of digital marketing and political engagement. From friend networks to viral content and influencer culture, social media platforms have made a profound impact on society.
Final Thoughts
These software ideas have had far-reaching effects on the world. They not only changed how businesses operate and how developers create solutions but also influenced how people connect, learn, and interact. With the continuous evolution of technology, the next groundbreaking software idea is always around the corner—who knows what will make the list next?
These software innovations show how far we've come and how much potential there is for future developments. From AI to blockchain, the possibilities are endless, and the next era of software breakthroughs is sure to continue shaping the world.
AI - GenAI prototype
I have started work on an AI project just for fun but the aim is to build an AI model of all of my PDF and Word Documents to allow me to quickly find some answers to questions I may have but it will be clever enough to act something like CHATGPT.
I am looking into how to add additional data to the PDF to help with the embeddings.
It uses Java 21, Spring AI, Ollama, Oracle DB and a small front end, which you can see the sample output if you click on the image.
New DAAD Creator Editor (internal use only)
I have started work on an editor for DAAD games (ZX Spectrum 128K specifically but could be extended). I will use this to finish my game Framed! then I will see if I can make it a public editor, but this will take time, next year maybe? It can import existing DSF files, but at the moment you have to separate out the sections and save them.
It can import the Trizbort Quest format, taking all of the locations, exits and descriptions. I have also integrated the DAAD Ready! compiler, just clicking the "Generate" button will do all of the building and then fire up the finished game, ready for testing.Lastly, you can see I have begun to apply a dark theme. I am hoping that I can add a properties page, to allow the user to select dark or light.
This is certainly an on going project but the goal is to have one tool that does it all.
Partial Abstract Art?
I have been experimenting using a kind of abstract art for some of my locations in my Framed! game. Abstract (Partial) art for me is about drawing something that is not straight away noticeable but is! Anyway, I have been playing around with my version of abstract art and the image shown is just one example of it. I did another one also but that is for the game only.
FRAMED!
Ported game from Lost Wurld(C) to DAAD and this is the title screen. "Lost Wurld" is a tool that generates the required data from an Import of Trizbort IF Mapping tool. The export of Trizbort, which a modified version for not just exporting of locations but extra items such as objects and their attributes.