Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

https://doi.org/10.5281/zenodo.15281299
25 April 2025, 10:06:35 UTC
  • Code
  • Branches (0)
  • Releases (1)
  • Visits
    • Branches
    • Releases
      • 1
      • 1
    • c999079
    • /
    • conradhuebler-ALIMA-9149c20
    • /
    • llm_interface_test.py
    Raw File Download

    To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
    Select below a type of object currently browsed in order to display its associated SWHID and permalink.

    • content
    • directory
    • snapshot
    • release
    origin badgecontent badge
    swh:1:cnt:75bad2126dc57df887e37a4cf7b732c09537a9ae
    origin badgedirectory badge
    swh:1:dir:9c72c77c294e128e1d4610d12e313488bc084d66
    origin badgesnapshot badge
    swh:1:snp:4ca73675f00499f7788b560b527d2d3608e24808
    origin badgerelease badge
    swh:1:rel:536b651fe52569a0b29d9afb23a4c016482765cb

    This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
    Select below a type of object currently browsed in order to generate citations for them.

    • content
    • directory
    • snapshot
    • release
    (requires biblatex-software package)
    Generating citation ...
    (requires biblatex-software package)
    Generating citation ...
    (requires biblatex-software package)
    Generating citation ...
    (requires biblatex-software package)
    Generating citation ...
    llm_interface_test.py
    from PyQt6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, 
                               QPushButton, QTextEdit, QComboBox, QLabel, QFileDialog,
                               QHBoxLayout)
    from PyQt6.QtCore import QThread, pyqtSignal
    import sys
    import asyncio
    from pathlib import Path
    from src.core.llm_interface import LLMInterface  # Ihre LLM Interface Klasse
    
    class GenerateThread(QThread):
        finished = pyqtSignal(str)
        
        def __init__(self, llm_interface, provider, model, prompt, image=None):
            super().__init__()
            self.llm_interface = llm_interface
            self.provider = provider
            self.model = model
            self.prompt = prompt
            self.image = image
            
        def run(self):
            response = self.llm_interface.generate_response(
                self.provider, 
                self.model, 
                self.prompt, 
                self.image
            )
            self.finished.emit(response)
    
    
    class LLMApp(QMainWindow):
        def __init__(self):
            super().__init__()
            self.llm_interface = LLMInterface()
            self.current_image = None
            self.init_ui()
            
        def init_ui(self):
            self.setWindowTitle("LLM Interface")
            self.setGeometry(100, 100, 800, 600)
            
            central_widget = QWidget()
            self.setCentralWidget(central_widget)
            layout = QVBoxLayout(central_widget)
            
            # Provider and Model Selection
            selection_layout = QHBoxLayout()
            
            provider_layout = QVBoxLayout()
            provider_layout.addWidget(QLabel("Provider:"))
            self.provider_combo = QComboBox()
            self.provider_combo.addItems(self.llm_interface.get_available_providers())
            self.provider_combo.currentTextChanged.connect(self.update_models)
            provider_layout.addWidget(self.provider_combo)
            selection_layout.addLayout(provider_layout)
            
            model_layout = QVBoxLayout()
            model_layout.addWidget(QLabel("Model:"))
            self.model_combo = QComboBox()
            model_layout.addWidget(self.model_combo)
            selection_layout.addLayout(model_layout)
            
            layout.addLayout(selection_layout)
            
            # Image Selection
            image_layout = QHBoxLayout()
            self.image_label = QLabel("No image selected")
            image_layout.addWidget(self.image_label)
            
            select_image_btn = QPushButton("Select Image")
            select_image_btn.clicked.connect(self.select_image)
            image_layout.addWidget(select_image_btn)
            
            clear_image_btn = QPushButton("Clear Image")
            clear_image_btn.clicked.connect(self.clear_image)
            image_layout.addWidget(clear_image_btn)
            
            layout.addLayout(image_layout)
            
            # Prompt Input
            layout.addWidget(QLabel("Prompt:"))
            self.prompt_input = QTextEdit()
            self.prompt_input.setMinimumHeight(100)
            layout.addWidget(self.prompt_input)
            
            # Generate Button
            generate_btn = QPushButton("Generate Response")
            generate_btn.clicked.connect(self.generate_response)
            layout.addWidget(generate_btn)
            
            # Response Output
            layout.addWidget(QLabel("Response:"))
            self.response_output = QTextEdit()
            self.response_output.setReadOnly(True)
            self.response_output.setMinimumHeight(200)
            layout.addWidget(self.response_output)
            
            self.update_models()
            
        def update_models(self):
            provider = self.provider_combo.currentText()
            models = self.llm_interface.get_available_models(provider)
            self.model_combo.clear()
            self.model_combo.addItems(models)
            
        def select_image(self):
            file_name, _ = QFileDialog.getOpenFileName(
                self,
                "Select Image",
                "",
                "Image Files (*.png *.jpg *.jpeg)"
            )
            if file_name:
                self.current_image = file_name
                self.image_label.setText(Path(file_name).name)
                
        def clear_image(self):
            self.current_image = None
            self.image_label.setText("No image selected")
            
        def generate_response(self):
            provider = self.provider_combo.currentText()
            model = self.model_combo.currentText()
            prompt = self.prompt_input.toPlainText()
            
            self.thread = GenerateThread(
                self.llm_interface, 
                provider, 
                model, 
                prompt, 
                self.current_image
            )
            self.thread.finished.connect(self.update_response)
            self.thread.start()
            
        def update_response(self, response):
            self.response_output.setPlainText(response)
    
    def main():
        app = QApplication(sys.argv)
        window = LLMApp()
        window.show()
        sys.exit(app.exec())
    
    if __name__ == '__main__':
        main()
    

    back to top

    Software Heritage — Copyright (C) 2015–2026, The Software Heritage developers. License: GNU AGPLv3+.
    The source code of Software Heritage itself is available on our development forge.
    The source code files archived by Software Heritage are available under their own copyright and licenses.
    Terms of use: Archive access, API— Content policy— Contact— JavaScript license information— Web API