Please design an Interface for this data with multiple tabs for visually displaying the data and making predictions by analyzing the data, leverage the llm included below the data if it helps.  								02.08.21 -07.08.2021					09.08. - 13.08.2021					16.08. - 20.08.21					23.08.-28.08.21					07.09.2021					14.09.2021					20.09.2021										11.10.2021					19.10.2021					25.10.2021					02.11.2021					08.11.2021			
	Dieselsheet / Services								Km till 					Km till 					Km till 					Km till 					Km till 					Km till 					Km till 					Km till 					Km till 					Km till 					Km till 					Km till 					Km till 		
Fleet Number	Description	Location	Reg no.	Operator	N/Service	Serviced	L/Service		Service	N/Service	Serviced	L/Service		Service	N/Service	Serviced	L/Service		Service	N/Service	Serviced	L/Service		Service	N/Service	Serviced	L/Service		Service	N/Service	Serviced	L/Service		Service	N/Service	Serviced	L/Service		Service	N/Service	Serviced	L/Service		Service	N/Service	Serviced	L/Service		Service	N/Service	Serviced	L/Service		Service	N/Service	Serviced	L/Service		Service	N/Service	Serviced	L/Service		Service	N/Service	Serviced	L/Service		Service	N/Service	Serviced
V0406	Honda 250 Quad (100 ure)	KWK	15	Augus Loff	6833		5595	6,741		5700		5595	5,595	105	5700	Serviced	5595			5700		5595			5700		5595			5700		5595			5700		5595			5700		5595			5700		5595			5700		5595			5700		5595	5,645	55	5700		5595			5700		5595			5700	
V0407	Honda 250 Quad (100 ure)	GV	16	Annemarie Booysen	6216		6116	6145		6216		6116	6155	61	6216		6116	6164	52	6216		6116	6171	45	6216		6116	6182	34	6216		6116	6193		6216		6116	6206	10	6216		6116	6224	-8	6216		6248	6256	92	6348	Serviced	6248	6271	77	6348		6248	6274	74	6348		6248	6285	63	6348		6248	6297	51	6348	
V0408	Yamaha Big Bear Blou 250 Quad   (100 ure) 	10R	17	Dawid Pieters			odo dood					odo dood					odo dood					odo dood					odo dood					odo dood					odo dood					odo dood					odo dood					odo dood					odo dood					odo dood					odo dood				
V0409	Honda 250 Quad (100 ure)	BFN	18	Hannes Momsen	5384		5284			5384		5284			5384		5284			5384		5284			5384		5284			5384		5284			5384		5284			5384		5284			5384		5284			5384		5284			5384		5284			5384		5284			5384		5284			5384	
V0410	Honda 250 Fourtrax Quad  (100 ure)	HKR	19	Conrad Vorster	2675		2425	2,546		2675		2425	2,549	126	2675		2425	2,556	119	2675		2425	2,557	118	2675		2425	2,558	117	2675		2425	2,560		2675		2425	2,560	115	2675		2425	2,562	113	2675		2425			2675		2425			2675		2425			2675		2425	2,590	85	2675		2425	2,514	161	2675	
V0411	Honda 125 XR 2 wiel (2 000 km)	BFN	20	Hendrik Banies	33800		31800	33350		33800		31800	33396	404	33800		31800	33412	388	33800		31800			33800		31800	33487	313	33800		31800	33541		33800		31800	33577	223	33800		31800	33622	178	33800		31800	33652	148	33800		31800	33666	134	33800		31800			33800		31800	33717	83	33800		31800	33737	63	33800	
V0412	Honda 125 XR 2 wiel   (2 000 km)	HKR	21									20333			22333		20333			22333		20333			22333		20333			22333		20333			22333		20333			22333		20333			22333		20333			22333		20333			22333		20333			22333		20333			22333		20333			22333	
V0413	Honda 125 XR 2 wiel   (2 000 km)	MAANSKLOOF	22				50000					50000					50000			52000		50000			52000		50000			52000		50000			52000		50000			52000		50000			52000		50000			52000		50000			52000		50000			52000		50000			52000		50000			52000	
V0414	Honda 125 XR 2 wiel   (2 000 km)	BFN	23	SPAAR	41000		39000			41000		39000			41000		39000			41000		39000			41000		39000			41000		39000			41000		39000			41000		39000			41000		39000			41000		39000			41000		39000			41000		39000			41000		39000			41000	
V0416	Honda 125 XR 2 wiel   (2 000 km)	BFN	25	Dawid mentoor	57800		55800			57800		55800			57800		55800			57800		55800			57800		55800			57800		55800			57800		55800			57800		55800			57800		55800			57800		55800			57800		55800			57800		55800			57800		55800			57800	
V0417	Honda 125 XR 2 wiel   (2 000 km) staan Elvin	THK	26	SPAAR	54500		52500			54500		52500			54500		52500			54500		52500			54500		52500			54500		52500			54500		52500			54500		52500			54500		52500			54500		52500			54500		52500			54500		52500			54500		52500			54500	
V0418	Honda 125 XR 2 wiel   (2 000 km)	THK	27	Boetie Ghap	54200		52200			54200		52200			54200		52200			54200		52200			54200		52200			54200		52200			54200		52200			54200		52200			54200		52200			54200		52200	53070	1,130	54200		52200	53460	740	54200		52200	53982	218	54200		52200	54360	-160	54200	
V0419	Honda 125 XR 2 wiel   (2 000 km)	BFN	28	John Mentoor	54500					54500					54500		49533			51533		49533			51533		49533			51533		49533			51533		49533			51533		49533			51533		49533			51533		49533			51533		49533			51533		49533			51533		49533			51533	
V0420	Honda 125 XR 2 wiel   (2 000 km)	HKR	29	Jan Hedriks	52300					52300					52300		2300			432		2300			432		2300			432		2300			432		2300			432		2300			432		2300			432		2300			432		2300			432		2300			432		2300			432	
V0421	Honda 125 XR 2 wiel   (2 000 km) spaar	BFN	30	Sidney Pieters	60200		58200			60200		58200			60200		58200			60200		58200			60200		58200			60200		58200			60200		58200			60200		58200			60200		58200			60200		58200			60200		58200			60200		58200			60200		58200			60200	
V0422	Honda 125 XR 2 wiel   (2 000 km)	10R	31	Jan Hendriks	57290		55290			57290		55290			57290		55290			57290		55290			57290		55290			57290		55290			57290		55290			57290		55290			57290		55290			57290		55290			57290		55290			57290		55290			57290		55290			57290	
V0423	Honda 125 XR 2 wiel   (2 000 km)	10R	32	Pieter Janse	28300		26300			28300		26300			28300		26300			28300		26300			28300		26300			28300		26300			28300		26300			28300		26300			28300		1350			3350	Serviced	1350	1395	1,955	3350		1350	1464	1,886	3350		1350	1508	1,842	3350		1350	1635	1,715	3350	
V0424	Honda 125 XR 2 wiel   (2 000 km)	KK	33	Apools Brink	11500		9500			11500		9500			11500		9500			11500		9500			11500		9500	10879	621	11500		9500			11500		9500			11500		9500			11500		9500			11500		9500			11500		9500			11500		9500			11500		9500			11500	
V0425	Quad Grizzly 300 Quad  (100 ure)	DK	34	Piet Pedro	1850		1747	1785		1850		1747	1794	56	1850		1747	1801	49	1850		1747	1803	47	1850		1747	1809	41	1850		1747	1816		1850		1747	1821	29	1850		1747	1830	20	1850		1845	1857	88	1945		1845	1861	84	1945		1845	1875	70	1945		1845	1885	60	1945		1845	1900	45	1945	
V0427	Timberwolf 250 (204) Quad  (100 ure)	Maanskloof	36	Linkie 			engine Oki					engine Oki					engine Oki					engine Oki					engine Oki					engine Oki					engine Oki					engine Oki					engine Oki					engine Oki					engine Oki					engine Oki					engine Oki				
V0428	Honda 125 XR 2 wiel   (2 000 km)	BFN	37	Frank Snyders	54300		52300			54300		52300			54300		52300			54300		52300			54300		52300			54300		52300			54300		52300			54300		52300			54300		52300			54300		52300			54300		52300			54300		52300			54300		52300			54300	
V0429	Honda 125 XR 2 wiel   (2 000 km)	BFN	38	Sydney Pieterse	32500		30800	31351		32500		30800	31676	824	32500		30800	31752	748	32500		30800			32500		30800	31965	535	32500		30800	32132		32500		30800	32337	163	32500		30800	32659	-159	32500		32700			34700		32700	33097	1,603	34700		32700	33355	1,345	34700		32700	33634	1,066	34700		32700	33815	885	34700	
V0430	Honda 500 Quad  (100 ure)	10R	39	Adri Smit	2470		2370	17797		2470		2370	2370	100	2470		2370			2470		2370			2470		2370	2371	99	2470		2370			2470		2370			2470		2370			2470		2370			2470		2370	2376	94	2470		2370	2376	94	2470		2370			2470		2370			2470	
V0431	Honda 125 XR 2 wiel   (2 000 km)	KV	40	SPAAR	29276		27276			29276		27276			29276		27276			29276		27276			29276		27276			29276		27276			29276		27276			29276		27276			29276		27276			29276		27276			29276		27276			29276		27276			29276		27276			29276	
V0432	Honda 125 XR 2 wiel   (2 000 km)	RGR	41	Adrian	41400		39400	402817		41400		39400	40521	879	41400		39400	40654	746	41400		39400	40802	598	41400		39400	40820	580	41400		39400	41063		41400		39400	41253	147	41400		39400	41623	-223	41400		39400	42501	-1,101	41400		39400			41400		39400			41400		39400			41400		39400			41400	
V0433	Honda XR 150   (2 000 km)	HKR	42	Pieter Fransman	5700		3700	5,267		5700		3700			5700		3700	5,325	375	5700		3700			5700		3700	5,385	315	5700		3700	5,428		5700		3700			5700		3700	5,456	244	5700		3700	5,474	226	5700		3700	5,267	433	5700		3700	5,474	226	5700		3700	5,474	226	5700		3700	5,474	226	5700	
V0434	Honda XR 150   (2 000 km)	THK	43	Manfred Mentoor	19300		17300			19300		17300	17911	1,389	19300		17300	18007	1,293	19300		17300	18172	1,128	19300		17300			19300		17300	18620		19300		17300	18729	571	19300		17300	18919	381	19300		17300	19196	104	19300		17300	19248	52	19300		17300	19502	-202	19300		17300	19717	-417	19300		17300	19839	-539	19300	
V0435	Honda 125 XR 2 wiel   (2 000 km)	BFN	44	Patrick Swarts	56200		54200			56200		54200			56200		54200			56200		54200			56200		54200			56200		54200			56200		54200			56200		54200			56200		54200			56200		54200			56200		54200			56200		54200			56200		54200			56200	
V0436	Honda 125 XR 2 wiel   (2 000 km)	KWK	45	Wilfred de Wee	37200		35200			37200		35200			37200		35200			37200		35200			37200		35200			37200		35200			37200		35200			37200		35200			37200		35200			37200		35200			37200		35200			37200		35200			37200		35200			37200	
V0437	Honda 125 XR 2 wiel   (2 000 km)	JAAGVLEI	46	Jodene Jacobs	35000		33000	34,843		35000		33000	34,924	76	35000		33000	35,002	-2	35000		35000	35,042	1,958	37000	Serviced	35000	35,081	1,919	37000		35000	35,158		37000		35000	35,308	1,692	37000		35000	35,386	1,614	37000		35000	35,533	1,467	37000		35000	35,640	1,360	37000		35000	35,728	1,272	37000		35000	35,919	1,081	37000		35000	35,989	1,011	37000	
V0438	Honda 125 XR 2 wiel   (2 000 km)	DK	47	Rico Baron	22400		20440	21187		22400		20440	21261	1,139	22400		20440	21354	1,046	22400		20440	21476	924	22400		20440	21640	760	22400		20440	21905		22400		20440	22136	264	22400		20440	22316	84	22400		20440	22728	-328	22400		20440	23003	-603	22400		20440	23133	-733	22400		20440	23238	-838	22400		23000	23292	1,708	25000	
V0439	Honda 125 XR 2 wiel (2 000 km)	BFN	48	Theo Hendriks	23600		21600	23731		23600		21600	24016	-416	23600		21600	24259	-659	23600		24000	24425	1,575	26000	Serviced	24000	24448	1,552	26000		24000	24811		26000		24000	25161	839	26000		24000	25548	452	26000		24000	26366	-366	26000		24000	26808	-808	26000		24000	27196	-1,196	26000		24000	27680	-1,680	26000		24000	27992	-1,992	26000	
V0440	Honda 125 XR 2 wiel (2 000 km)	HKR	49	Gert - Duimpie	12700		10700	12263		12700		12300	12265	10,035	22300	sERVICED	12300	12380	9,920	22300		12300	12538	9,762	22300		12300	12886		22300		12300	13000		22300		12300	13227	1,073	14300		12300	13334	966	14300		13700	13602	2,098	15700		13700	13795	1,905	15700		13700	13967	1,733	15700		13700	14053	1,647	15700		13700	14201	1,499	15700	
V0441	Honda 125 XR 2 wiel (2 000 km)	MAANSKLOOF	50	Jaco September	9300		7300	9016		9300		7300	9032	268	9300		7300	9119	181	9300		7300	9180	120	9300		7300	9253	47	9300		7300	9309		9300		9300	9371	1,929	11300		9300	9547	1,753	11300		9300	9597	1,703	11300		9300	9747	1,553	11300		9300	9931	1,369	11300		9300	10152	1,148	11300		9300	10297	1,003	11300	
V0442	Honad 125 XR 2 Wiel (2 000 km)	HKR	51	Frans Hektoor	7900		5900	8152		7900		5900	8316	-416	7900		5900			7900		5900			7900		8300	8359	1,941	10300		8300			10300		8300	8391	1,909	10300		8300			10300		8300	8611	1,689	10300		8300	8859	1,441	10300		8300	9093	1,207	10300		8300	9139	1,161	10300		8300	9155	1,145	10300	
V0443	Honda 125 XR 2 wiel (2 000 km)	KK	52	Damon September	10900		8900			10900		8900			10900		8900	10289	611	10900		8900	10249	651	10900		8900	10419	481	10900		8900	10518		10900		8900	10808	92	10900		8900	11097	-197	10900		8900	11533	-633	10900		8900			10900		8900	11989	-1,089	10900		8900	12345	-1,445	10900		8900	12600	-1,700	10900	
V0444	Honda 125 XR 2 wiel (2 000 km)	BFN	53	John Mentoor	16850		14850	15930		16850		14850	16033	817	16850		14850	16142	708	16850		14850	16328	522	16850		14850	16521	329	16850		14850	16755		16850		14850	17005	-155	16850		14850	17210	-360	16850		17200	17595	1,605	19200		17200	17831	1,369	19200		17200	18068	1,132	19200		17200			19200		17200	18442	758	19200	
V0445	Honda 125 XR 2 wiel (2 000 km)	10R	54	Ruddi Basson	7276		5276			7276		5276			7276		5276			7276		5276			7276		5276			7276		5276			7276		5276			7276		5276			7276		5276			7276		5276	8897	-1,621	7276		5276	9067	-1,791	7276		5276	9148	-1,872	7276		9000	9316	1,684	11000	
V0446	Honda 125 XR 2 wiel (2 000 km)	HKR	55	Lukas Boks	8600		6600	6892		8600		6600	6985	1,615	8600		6600	7040	1,560	8600		6600			8600		6600	7099	1,501	8600		6600	7254		8600		6600			8600		6600	7585	1,015	8600		6600	7844	756	8600		6600	6892	1,708	8600		6600	8290	310	8600		6600	8551	49	8600		6600	8731	-131	8600	
V0447	Honda 125 XR 2 wiel (2 000 km)	KK	56	Donovan Nero	9300		7300			9300		7300	8296	1,004	9300		7300	8432	868	9300		7300	8539	761	9300		7300	8654	646	9300		7300	8869		9300		7300	9084	216	9300		7300	9396	-96	9300		7300	9933	-633	9300		7300	10232	-932	9300		10473	10473	2,000	12473	SERVICED	10473	10609	1,864	12473	SERVICED	10473	10885	1,588	12473	
V0448	Honda 125 XR	BFN	57	Patrick Swarts	6100		4100	4929		6100		4100	5051	1,049	6100		4100	5176	924	6100		4100	5467	633	6100		4100	5878	222	6100		4100	6287		6100		6400	6739	1,661	8400		6400	7127	1,273	8400		6400	7940	460	8400		6400	8343	57	8400		6400	8619	-219	8400		6400	9208	-808	8400		6400	9548	-1,148	8400	
V0449	Honda 125 XR	KV	58	Petrus Snyers	4200		2200	35123		4200		2200	3666	534	4200		2200	3831	369	4200		2200	4017	183	4200		2200	4169	31	4200		2200	4362		4200		4400	4533	1,867	6400		4400	4800	1,600	6400		4400	5343	1,057	6400		4400	5594	806	6400		4400	5853	547	6400		4400	6123	277	6400		4400	6440	-40	6400	
V0450	Honda 125 XR	BFN	59	Frank Snyders	5330		3330	5499		5330		3330	5503	-173	5330		3330	5928	-598	5330		6000	6261	8,000	5330	serviced	6000			5330		6000	7244		5330		6000	7880	120	8000		6000	8341	-341	8000		8300	9584	716	10300		8300	10104	196	10300		8300	10766	-466	10300		8300	11135	-835	10300		8300	11592	-1,292	10300	
V0451	Honda 125 XR	BFN	60	Reginald Willemse	2000		0	1311		2000		0	1462	538	2000		0			2000		0	1493	507	2000		0	1780	220	2000		0	1983		2000		0	2170	-170	2000		0	2406	-406	2000		2400	2912	1,488	4400		2400	3162	1,238	4400		2400	3348	1,052	4400		2400	3601	799	4400		2400	3828	572	4400	
V0452	Honda 125 XR	10R	61	Jan Hendriks	2000		0			2000		0			2000		0			2000		0			2000		0			2000		0			2000		0			2000		0			2000		4950			6950	Serviced	4950	5045	1,905	6950		4950	5203	1,747	6950		4950	5384	1,566	6950		4950	5531	1,419	6950	
V0453	Honda 125 XR	BFN	62	Dawid Mentoor	2000		0	1642		2000		0	1853	147	2000		0	1982	18	2000		2200			4200	serviced	2200	2315	1,885	4200		2200	2591		4200		2200	2828	1,372	4200		2200	3036	1,164	4200		2200			4200		2200	3662	538	4200		2200	6293	-2,093	4200		2200			4200		2200	4322	-122	4200	
V0454	Honda 125 XR	KWK	63	Wilfred de Wee	4000		1986	3577		4000		1986	3744	256	4000		1986	3943	57	4000		4000	4157	1,843	6000	Serviced	4000	4441	1,559	6000		4000	4676		6000		4000	4923	1,077	6000		4000	5241	759	6000		4000	5800	200	6000		4000	6032	-32	6000		4000			6000		4000	6586	-586	6000		4000	6834	-834	6000	
V0455	Honda TRX 250	MK	64	Jaco September																																																																			
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QTextEdit, QPushButton, QLabel, QFileDialog, QMessageBox, QHBoxLayout
from PyQt6.QtGui import QPixmap
from PyQt6.QtCore import Qt
import requests
from bs4 import BeautifulSoup
import huggingface_hub

# Initialize the LLM client
client = huggingface_hub.InferenceClient(
    "mistralai/Mistral-7B-Instruct-v0.3",
    token="<TRUFFLEHOG_REDACTED_HUGGINGFACE>"
)

class LLMInteractionGUI(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("LLM Interaction")
        self.setGeometry(100, 100, 600, 500)

        self.layout = QHBoxLayout()

        # Input box for user prompt
        self.inputBox = QTextEdit()
        self.layout.addWidget(self.inputBox)

        # Search results display
        self.searchResultsBox = QTextEdit()
        self.searchResultsBox.setReadOnly(True)
        self.layout.addWidget(self.searchResultsBox)

        # Image display label
        self.imageLabel = QLabel(self)
        self.imageLabel.setScaledContents(True)
        self.layout.addWidget(self.imageLabel)

        # LLM response display
        self.responseBox = QTextEdit()
        self.responseBox.setReadOnly(True)
        self.layout.addWidget(self.responseBox)

        # Control buttons (attach image, send prompt)
        self.controlsLayout = QVBoxLayout()

        # Attach image button
        self.attachBtn = QPushButton("Attach Image")
        self.attachBtn.clicked.connect(self.attachImage)
        self.controlsLayout.addWidget(self.attachBtn)

        # Send button for interacting with LLM
        self.sendBtn = QPushButton("Send")
        self.sendBtn.clicked.connect(self.interactWithLLM)
        self.controlsLayout.addWidget(self.sendBtn)

        # Add control buttons layout
        self.layout.addLayout(self.controlsLayout)

        # Set the layout for the main window
        self.setLayout(self.layout)

    def attachImage(self):
        """Attach an image and display it in the label."""
        image_path, _ = QFileDialog.getOpenFileName(self, 'Attach Image', '', 'Image files (*.png *.jpg *.jpeg)')
        if image_path:
            img = QPixmap(image_path)
            img = img.scaled(150, 150, Qt.AspectRatioMode.KeepAspectRatio)
            self.imageLabel.setPixmap(img)

    def interactWithLLM(self):
        """Send input to the LLM and display the response."""
        user_input = self.inputBox.toPlainText()

        if "search the web for" in user_input.lower():
            query = user_input.split("search the web for")[-1].strip()
            search_results = self.perform_web_search(query)
            self.searchResultsBox.setPlainText(search_results)

            # Combine search results for LLM processing
            combined_prompt = f"Based on the following search results for '{query}':\n{search_results}\n\nProvide a summary or answer."
            llm_response = self.get_llm_response(combined_prompt)
        else:
            llm_response = self.get_llm_response(user_input)

        self.responseBox.setPlainText(llm_response.strip())
        
        # Check for image URLs in the LLM response and display the image if found
        image_url = self.extract_image_url(llm_response)
        if image_url:
            self.display_image(image_url)

    def perform_web_search(self, query):
        """Perform a web search and return the results."""
        search_results = ""
        try:
            url = f"https://duckduckgo.com/?q={query}"
            headers = {"User-Agent": "Mozilla/5.0"}
            response = requests.get(url, headers=headers)
            response.raise_for_status()

            soup = BeautifulSoup(response.text, 'html.parser')
            results = soup.find_all('a', class_='result__a')
            if not results:
                return "No results found."

            for item in results:
                title = item.get_text()
                link = item['href']
                search_results += f"{title}: {link}\n"
        except Exception as e:
            search_results = f"Failed to perform web search: {e}"

        return search_results

    def get_llm_response(self, prompt):
        """Get a response from the Hugging Face LLM based on the user's prompt."""
        output_text = ""
        try:
            for message in client.chat_completion(
                messages=[{"role": "user", "content": prompt}],
                max_tokens=4096,
                stream=True,
            ):
                content = message['choices'][0]['delta']['content']
                output_text += content
        except Exception as e:
            output_text = f"Error interacting with LLM: {e}"
        
        return output_text

    def extract_image_url(self, response):
        """Extract an image URL from the LLM response, if any."""
        if "http" in response and (response.endswith(".jpg") or response.endswith(".png")):
            return response.strip()  # Return the URL if found
        return None

    def display_image(self, url):
        """Display an image in the GUI from the given URL."""
        try:
            response = requests.get(url)
            img = QPixmap()
            img.loadFromData(response.content)
            img = img.scaled(150, 150, Qt.AspectRatioMode.KeepAspectRatio)
            self.imageLabel.setPixmap(img)
        except Exception as e:
            QMessageBox.critical(self, "Error", f"Failed to load image: {e}")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    gui = LLMInteractionGUI()
    gui.show()
    sys.exit(app.exec())