Python Fehlermeldung "KeyError: 'data'"?

Ich möchte gerne einen KI Discord Server machen. Die KI hab ich schon und diese hat auch eine API(?). Ich hab den Bot auch schon auf dem Server und ich kann auch Prompts eingeben. Aber wenn ich Prompt eingebe, kommt bei diesem Code:

import discord
from gradio_client import Client


TOKEN = 'MeinToken'
FOOOCUS_API_URL = 'http://127.0.0.1:7865/'


fooocus_client = Client(FOOOCUS_API_URL)


intents = discord.Intents.default()
client = discord.Client(intents=intents)


@client.event
async def on_ready():
    print(f'{client.user} ist eingeloggt!')


@client.event
async def on_message(message):
    if message.channel.name == 'prompt-kanal' and message.author != client.user:
        result = fooocus_client.predict(message.content, fn_index=2)
        await message.channel.send(file=discord.File(result))


client.run(TOKEN)

Diese Fehlermeldung:

2024-04-16 15:35:07 ERROR discord.client Ignoring exception in on_message
Traceback (most recent call last):
File "C:...\venv\Lib\site-packages\gradio_client\compatibility.py", line 105, in _predict
output = result["data"]
~~~~~~^^^^^^^^
KeyError: 'data'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:...\venv\Lib\site-packages\discord\client.py", line 441, in _run_event
await coro(*args, **kwargs)
File "c:...\bot.py", line 19, in on_message
result = fooocus_client.predict(message.content, fn_index=2)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:...\venv\Lib\site-packages\gradio_client\client.py", line 459, in predict
).result()
^^^^^^^^
File "C:...\venv\Lib\site-packages\gradio_client\client.py", line 1374, in result
return super().result(timeout=timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users..._base.py", line 456, in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
File "C:\Users..._base.py", line 401, in __get_result
raise self._exception
File "C:\Users...\thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:...\compatibility.py", line 65, in _inner
predictions = _predict(*data)
^^^^^^^^^^^^^^^
File "C:...\compatibility.py", line 119, in _predict
raise KeyError(
KeyError: 'Could not find 'data' key in response. Response received: {'detail': [{'type': 'model_attributes_type', 'loc': ['body'], 'msg': 'Input should be a valid dictionary or object to extract fields from', 'input': '{"data": [""], "fn_index": 2, "session_hash": "d7f62bf0-174c-45fe-b3f6-c5e7f00848d3"}', 'url': 'https://errors.pydantic.dev/2.1/v/model_attributes_type'}]}'

Ich checke einfach nicht, woran das liegen könnte...

Linux, Bot, cmd, Code, künstliche Intelligenz, Programmiersprache, Python, Python 3, Pycharm, Discord, Discord Bot, ChatGPT
Python | Decoratoren richtig nutzen?

Guten Tag,

ich arbeite in Moment an ein kleines Projekt mit einer API für den Privatgebrauch.

Ich möchte mithilfe von Decoratoren ein Event registrieren.
Dieser Code ist nur ein Beispielcode und soll nur darstellen, was ich genau erreichen möchte:

main.py:

import time


class Bot:
    _events: list = []


    def __init__(self):
        ... # Übergabe der Instanz...


    @classmethod
    def event(cls, func):
        ... # Überprüfen, ob es sich um ein gültiges Event handelt 


        cls._events.append(func) # Registiert das Event, falls es gültig ist
        return func
    
    @classmethod
    def event_handler(cls):
        for event in cls._events:
            if callable(event):
                event()


    def start(self) -> None:
        while True:
            time.sleep(1)
            ...


if __name__ == "__main__":
    bot = Bot()
    bot.start()

Alle Events, die es gibt:

class Events:
    """Events die Verfügbar sind"""
    
    def on_check(self, chat):
        ... 


    def messages(self, message):
        ...

Die Nutzung:

class MyBot:
    
    """Das ist ein gültiges Event -> Funkionsname vom Event richtig, Parameter richtig
    Kann also in die Registration aufgenommen werden"""
    @bot.event
    def on_check(self, chat):
        ...


    """Kein gültiges Event -> Sprich die Funktion event soll ein Fehler ausgeben"""
    @bot.event
    def on_name(self, name):
        ...


    """Hier fehlt der Parameter -> Sprich die Funktion event soll ein Fehler ausgeben"""
    @bot.event
    def messages(self):
        ...

Ich hoffe es ist durch den Kommentaren klar, was mein Ziel ist. Falls Unklarheiten bestehen, stehe ich gerne zur Verfügung.

Vielen dank für eure Hilfe!
Liebe Grüße

Bot, Code, Programmiersprache, Python, API, Python 3
Wie findet ihr meine Idee der Einführung KI in Gutefrage?

Habe mir gerade ein bisschen Gedanken gemacht wie KI (künstliche Intelligenz) wie in ChatGPT diese Seite bereichern könnte ohne das es aufdringlich oder fehl am Platz wirkt.

Also meine Vorstellung wäre in etwa so: Nachdem der User seine Frage eingegeben hat, unter der stelle mit dem Hinweisen wo immer steht das man seine Frage mit Satzzeichen schreiben soll und da wo die Optionen für Bild oder Umfrage hinzuzufügen erscheint folgende Nachricht: "Zuerst die KI fragen? (Beta)" mit einem kleinen Fragezeichen Symbol auf welches man tippen kann um weitere Infos und Warnungen zu lesen. Dazu erscheint noch ein eingebettetes Ja/Nein Auswahlfeld wo man seine Entscheidung treffen kann.

Wählt der User hier ja aus ploppt zuerst eine Infografik auf mit disclaimern und wenn man diese gelesen hat klickt man entweder auf fortfahren oder abbrechen.

Anschließend wird die Frage von einer KI wie ChatGPT generiert.

Sobald das fertig ist bekommt der User die Auswahl zwischen "Frage beantwortet?" und "Frage trotzdem stellen", hinter letzterem könnte man noch optional ein Häkchen setzen welches die Antwort der KI auf der Frage-Seite eingeblendet lässt. So, dass dann wenn man die Frage eingestellt hat ein kleines feld da ist welches sagt "KI-Antwort einblenden" ebenfalls am besten mit Fragezeichen-Symbol für Hinweise. Diese Nachricht sollte dezent aussehen und nicht nervig sein.

Sollte der User "Frage beantwortet?" auswählen kann er optional vielleicht noch die Antwort in seiner Merkliste oder whatever speichern um sie später wiederzufinden, dazu noch ein Link auf die Startseite."

Um KI-Hater zu beruhigen könnte man hier noch ein Häckchenfeld platzieren welches sagt "Nicht mehr fragen" wodurch dann die Frage ob man seine Frage per KI beantwortet haben will gar nicht mehr angezeigt wird.

Das gleiche würde ich auch auf der Frageseite an sich einstellen, also dort wo man die KI-Antwort anzeigen lassen kann. So dass jemand der daran überhaupt kein Interesse hat das Feld für die KI-Antworten hat diese für immer ausblendet.

Gut wäre auch wenn man diese beiden opt out Einstellungen im Einstellungsbereich von gf platzlieren würde, also "KI-Inhalte ausblenden" neben einem Schalter, dort wo man z.B. auch den Nachtmodus aktivieren kann.

Auf diese Weise könnte man dazu beitragen, dass weniger sich wiederholende Fragen gestellt werden die man auch simpel von einer KI beantworten lassen könnte.

Am besten wäre noch wenn die Frage ob man seine Frage mit KI beantworten lassen kann bei bestimmten Wörtern in der Frage ausgeblendet wird so dass man sich da bisschen absichert dass es nicht bei pinkanten Fragen wo eine KI nicht weiterhelfen könnte gestellt wird.

Wahrscheinlich könnte das ziemlich viel Traffic generieren wenn es oft genutzt wird aber dafür könnte man die Nutzung auf 5x am tag o.ä. limitieren.

Findet ihr die Idee eher gut oder schlecht? Fallen euch Sachen ein die man da noch verbessern könnte?

Bitte kein bloßes KI-bashing sondern sachliche antworten.

Find ich nicht so gut / eher schlecht (Bitte begründen) 88%
Finde die Idee gut 12%
Finde ich gut aber ausbaufähig (Bitte kommentieren)) 0%
gutefrage.net, Chat, Forum, Feedback, Bot, Ideen, künstliche Intelligenz, gutefrage.net-App, ChatGPT, OpenAI
Python Chatbot-Fehler: Wo liegt hier das Problem?

Ich programmiere jetzt seit mehreren Stunden diesen Chatbot und finde den Fehler nicht, warum er es nicht schafft, auf die Frage: gut die richtige Antwort zu geben.

Hier ist mein Code und wenn ihr den Fehler findet, wäre ich euch sehr dankbar.

main.py:

class NeuroSama:
    def __init__(self):
        self.known_topics = self.load_topics("knowledge_base.txt")
        self.conversation_history = []
        self.load_conversation_log("conversation_log.txt")

    def respond(self, message):
        response = ""

        # Hier wird die Eingabe in Kleinbuchstaben umgewandelt, bevor sie verarbeitet wird
        message = message.lower()

        if self.is_new_topic(message):
            response = "Nein, was ist " + message + "?"
        else:
            response = self.get_response_from_file(message, "generate_response.py")

        self.conversation_history.append({"input": message, "output": response})
        return response

    def is_new_topic(self, topic):
        return topic.lower() not in self.known_topics

    def get_response_from_file(self, topic, filename):
        try:
            response_module = __import__(filename.split('.')[0])
            return response_module.generate_response(topic, self.conversation_history)
        except FileNotFoundError:
            return "Die Datei wurde nicht gefunden."
        except AttributeError:
            return "Die Funktion wurde nicht gefunden."

    def save_conversation(self, filename):
        with open(filename, 'w') as file:
            for convo in self.conversation_history:
                file.write(f"Eingabe: {convo['input']}\n")
                file.write(f"Antwort: {convo['output']}\n")
                file.write("\n")

    def load_topics(self, filename):
        known_topics = set()
        try:
            with open(filename, 'r') as file:
                for line in file:
                    known_topics.add(line.strip().lower())
        except FileNotFoundError:
            print("Datei nicht gefunden. Neue Datei wird erstellt.")
            open(filename, 'w').close()
        return known_topics

    def load_conversation_log(self, filename):
        try:
            with open(filename, 'r') as file:
                for line in file:
                    if line.startswith("Eingabe:"):
                        input_text = line[len("Eingabe:"):].strip()
                        output_text = file.readline()[len("Antwort:"):].strip()
                        self.conversation_history.append({"input": input_text, "output": output_text})
        except FileNotFoundError:
            print("Konversationsprotokoll nicht gefunden.")

# Beispielnutzung
neuro_sama = NeuroSama()

while True:
    user_input = input("Du: ")

    if user_input.lower() == 'exit':
        neuro_sama.save_conversation("conversation_log.txt")
        break

    response = neuro_sama.respond(user_input)
    print("Neuro-Sama:", response)

generate_response.py:

def generate_response(topic, conversation_history):
    if len(conversation_history) > 0:
        last_input = conversation_history[-1]['input'].lower()
        if 'hallo' in last_input:
            return "Hallo zurück!"
        elif any(variant in last_input for variant in ['gut', 'gutes', 'gutem', 'guter']):
            return "Es ist großartig zu hören, dass es dir gut geht!"
        else:
            return "Das ist interessant!"
    else:
        return "Ich bin mir nicht sicher, wie ich darauf reagieren soll."

Hier sind die Antworten, die ich derzeit bekommen habe:

= RESTART: C:\Users\####\Desktop\####\main.py
Du: hallo
Neuro-Sama: Hallo zurück!
Du: Hallo
Neuro-Sama: Hallo zurück!
Du: gut
Neuro-Sama: Nein, was ist gut?
Du: 
= RESTART: C:\Users\####\Desktop\####\main.py
Du: gut
Neuro-Sama: Nein, was ist gut?
Du: Gut
Neuro-Sama: Nein, was ist gut?
Du: 
Bot, Programmiersprache, ChatGPT
Virus auf dem Rechner im Studentenwohnheim?

Guten Tag,

Ich wohne in einer WG in einem Studentenwohnheim und wurde gerade angerufen, dass bei mir ein Virus bzw. ein Bot auf dem Rechner am 19.11 gefunden wurde der anscheinend irgendwie versucht auf die Server meiner Universität zuzugreifen, da diese mit dem Internet aus unserem Wohnheim gekoppelt sind. Sie haben mir gedroht, wenn ich das Problem nicht löse wird mir das Internet abgestellt, da diese Angriffe von meiner IP-Adresse kommen.

Ich habe eigentlich seit dem 20.11 nur Arbeitsrelevante Daten (die von meiner Uni kommen) gedownloadet, allerdings habe ich festgestellt, dass seit 23:00 Uhr am 20.11 eine weiße Datei, die mit zufälligen Buchstaben und Zahlen benannt ist, in meinem Ordner ist, welche ich nicht zuordnen konnte. Diese habe ich umgehend natürlich gelöscht.

Ich habe außerdem Windows Defender durchlaufen, der jedoch nichts gefunden hat und mir wurde in einer Email das Programm Malwarebytes empfohlen, welches ich gerade durchlaufen lassen habe und mir tatsächlich auch 4 oder 5 Dateien gelöscht hat.

Ich weiß jetzt nicht, ob das die Dateien waren oder nicht. Kann mir jemand noch Tipps geben, der Ahnung von der Materie hat, was ich noch tun kann?

In den Emails steht folgendes:

IP-Adresse      Ereignistyp                 Anzahl Zuletzt gesehen

----------------------------------------------------------------------------------

xxx.x.xxx.xxx   Bot                         3      2023-11-19 22:01:39+00:00

 

Beschreibung: Auf dem System scheint eine Bot-Software betrieben zu

             werden, die versucht, einen Command-and-Control (C2)-Server

             zu erreichen. Zu den unterschiedlichen Malwaretypen finden

             Sie im folgenden Dokument mehr Informationen (aktuell nur

             als PDF verfügbar):

und heute:

Hallo,

 

wir haben schon wieder eine Warnung:

 

IP-Adresse      Ereignistyp                 Anzahl Zuletzt gesehen

----------------------------------------------------------------------------------

xxx.x.xxx.xxx   Bot                         4      2023-11-21 21:05:30+00:00

         

Computer, Virus, Netzwerk, IT, Bot, cmd, Hacker, Informatik, IP-Adresse, Malware, Universität, Wohnheim, Cyberangriff
Discord ticket bot Öffnet kein ticket?

Wenn ich versuche ein neues ticket zu öffnen Kommt in discord der fehler: "Diese Interaktion ist fehlgeschlagen und im code-editor kommt die Fehlermeldung: "Traceback (most recent call last):

 , line 427, in _scheduled_task

  await item.callback(interaction)

, line 35, in ticket

  await interaction.defer(

AttributeError: 'Button' object has no attribute 'defer'

import discord

from discord.ext import commands

TOKEN = "DISCORD-BOTTOKEN"

bot = commands.Bot(command_prefix="!",

                   intents=discord.Intents.all(),

                   status=discord.Status.dnd)

async def change_bot_activity():

    activity = discord.Activity(type=discord.ActivityType.watching, name="")

    await bot.change_presence(activity=activity)

@bot.event

async def on_ready():

    print("Bot is Ready!")

    await change_bot_activity()

@bot.command(name="ticket")

@commands.has_permissions(administrator=True)

async def ticket(ctx):

    embed = discord.Embed(

        description="Drück den Button, um ein neues Ticket zu erstellen!"

    )

    view = CreateButton()

    await ctx.send(embed=embed, view=view)

class CreateButton(discord.ui.View):

    def __init__(self):

        super().__init__(timeout=None)

    @discord.ui.button(label="Create Ticket", style=discord.ButtonStyle.blurple, emoji="🎫", custom_id="ticketopen")

    async def ticket(self, button: discord.ui.Button, interaction: discord.Interaction):

        # Nutzerinteraktion bestätigen

        await interaction.defer()

        category = discord.utils.get(interaction.guild.categories, id=)

        for ch in category.text_channels:

            if ch.topic == f"{interaction.user.id} DO NOT CHANGE THE TOPIC OF THIS CHANNEL":

                await interaction.followup.send("Du hast bereits ein Ticket: {0}".format(ch.mention), ephemeral=True)

                return

        r1 = discord.utils.get(interaction.guild.roles, id=)

        overwrites = {

            interaction.guild.default_role: discord.PermissionOverwrite(read_messages=False),

            r1: discord.PermissionOverwrite(read_messages=True, send_messages=True, manage_messages=True),

            interaction.user: discord.PermissionOverwrite(read_messages=True, send_messages=True),

            interaction.guild.me: discord.PermissionOverwrite(read_messages=True, send_messages=True)

        }

        channel = await category.create_text_channel(

            name=str(interaction.user),

            topic=f"{interaction.user.id} DO NOT CHANGE THE TOPIC OF THIS CHANNEL!",

            overwrites=overwrites

        )

        await channel.send(embed=discord.Embed(

            title="Ticket erstellen",

            description="Pinge keine Teammitglieder",

            color=discord.Color.green()

        ))

        await interaction.followup.send(

            embed=discord.Embed(

                description="Erstelle ein neues Ticket {0}".format(channel.mention),

                color=discord.Color.white()

            )

        )

bot.run(TOKEN)

Bot, Programmiersprache, Python, Python 3, Discord, Discord Bot

Meistgelesene Fragen zum Thema Bot