No dude en comprarme un café para ayudar a apoyar este proyecto.
Soupy es un chatbot para la discordia que puede generar imágenes con un generador de imágenes local (flujo) y/o con Dall-E 3. Para chat, utiliza una combinación de Jsons, ChatGPT y un motor de búsqueda local para conversar con sus usuarios. Indexará los mensajes de chat de su usuario y usará esos mensajes para crear perfiles de usuarios. También indexará cada canal de su servidor al que tiene acceso.
Hay múltiples versiones de Soupy.
Soupy requiere acceso de API de OpenAI a los modelos CHATGPT. Por lo tanto, la porción de chat de Soupy usa dinero real . La generación de imágenes Dall-E 3 también lo hace. Puede omitir la generación Dall-E 3 y solo usar el flujo localmente.
La configuración inicial, en la que el historial del canal de su servidor se descargará e indexará y todos los usuarios de su servidor tendrán perfiles hechos de ellos cuestan dinero a través de la API de ChatGPT. Algún día también apoyaré LLMS Local, pero aún no.
Para que funcione el flujo, le sugiero que comience aquí, con el repositorio oficial de flujo. Pero una vez que tenga el flujo que aumente, puede usar soupy-gradio.py , incluido en este repositorio.
!flux (modelo de imagen local), !generate (Dall-e 3), !analyze (chatgpt) y !transform (chatgpt) para realizar una gama de acciones interesantes.BEHAVIOUR en .env . Pero ten cuidado con cómo lo cambias. Su redacción es importante para mantener espeso en la pista. Antes de configurar Soupy, asegúrese de tener lo siguiente instalado en su sistema:
Comience clonando el repositorio espeso a su máquina local:
git clone https://github.com/sneezeparty/soupy.git
cd soupy
Se recomienda utilizar un entorno virtual para administrar las dependencias.
python -m venv soupy
Active el entorno virtual:
En macOS y Linux:
source soupy/bin/activate
En Windows:
soupyScriptsactivate
Instale los paquetes de Python requeridos con pip :
pip install -r requirements.txt
Cree un archivo .env en el directorio raíz del proyecto y llénelo con las variables de entorno necesarias:
DISCORD_TOKEN=your_discord_bot_token
OPENAI_API_KEY=your_openai_api_key
CHANNEL_IDS=00,11
MAX_TOKENS=2500
MAX_TOKENS_RANDOM=75
MODEL_CHAT=gpt-4o-mini
UPDATE_INTERVAL_MINUTES=61
TRANSFORM="You give detailed and accurate descriptions, be specific in whatever ways you can, such as but not limited to colors, species, poses, orientations, objects, and contexts."
BEHAVIOUR="You are Soupy Dafoe, a sarcastic and witty Discord chatbot. You recall past interactions and conversations to inform your responses. Your replies are concise, straightforward, and infused with a bit of sarcasm, much like Jules from "Pulp Fiction." You are not overly positive and avoid asking questions unless necessary. Prioritize the most recent five messages when formulating your responses, especially if not directly mentioned. If the latest message is brief, focus your reply accordingly and consider ignoring extensive chat history. Integrate the user's profile information subtly to tailor your responses without making it the main focus. Be conversational, stay in the moment, and avoid being too random or wordy. Remember, you're kind of a jerk, but in a human-like way."
Tenga en cuenta que Soupy tendrá acceso a todos los canales a los que puede acceder. Pero responderá a todos los mensajes en los canales especificados anteriormente. De lo contrario, solo responderá al azar, o cuando @tagged.
Dentro del script, busque "/absoluto/directorio/of/your/script/" y reemplácelo con el directorio absoluto de la ubicación de su script.
Apache Solr se usa para indexar y buscar mensajes y perfiles de usuario. Siga estos pasos para instalar y configurar SOLR para espantos.
Descargue Solr : visite el sitio web de Apache Solr y descargue la última versión estable. También puede usar algunos administradores de paquetes: consulte la información de su distribución.
Extraer el paquete
Instale SOLR como servicio : siga la documentación en los pasos exactos para este proceso. Sin embargo, no es difícil. Puedes hacerlo.
Verificar la instalación :
Abra su navegador y navegue a http://localhost:8983/solr para acceder a la interfaz Solr Admin.
Soupy requiere un solo núcleo de Solr con campos específicos para indexar los perfiles de usuario de manera efectiva.
bin/solr create -c soupy
Agregue los campos necesarios al núcleo soupy para almacenar perfiles de usuario.
Accede a la interfaz de administración de Solr :
Navegue a http://localhost:8983/solr y seleccione el núcleo soupy .
Definir campos :
curl -X POST -H 'Content-type:application/json'
http://localhost:8983/solr/soupy/schema
-d '{
"add-field": {
"name": "id",
"type": "string",
"indexed": true,
"stored": true,
"required": true,
"multiValued": false
}
}'
o este
curl -X POST -H "Content-Type: application/json"
"http://localhost:8983/solr/soupy/schema"
-d '{
"add-field":{
"name":"user_problems",
"type":"text_general",
"indexed":true,
"stored":true
}
}'
Agregue los campos necesarios al núcleo soupy para almacenar perfiles de usuario e información del canal.
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
<field name="username" type="string" indexed="true" stored="true"/>
<field name="nicknames" type="string" indexed="true" stored="true" multiValued="true"/>
<field name="join_date" type="date" indexed="true" stored="true"/>
<field name="political_party" type="string" indexed="true" stored="true"/>
<field name="user_job_career" type="text_general" indexed="true" stored="true"/>
<field name="user_family_friends" type="text_general" indexed="true" stored="true"/>
<field name="user_activities" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_games" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_movies" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_music" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_television" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_life" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_food" type="text_general" indexed="true" stored="true"/>
<field name="general_opinions" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_politics" type="text_general" indexed="true" stored="true"/>
<field name="personality_traits" type="text_general" indexed="true" stored="true"/>
<field name="hobbies" type="text_general" indexed="true" stored="true"/>
<field name="user_interests" type="text_general" indexed="true" stored="true"/>
<field name="user_problems" type="text_general" indexed="true" stored="true"/>
<field name="tech_interests" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_technology" type="text_general" indexed="true" stored="true"/>
<field name="sports_interests" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_sports" type="text_general" indexed="true" stored="true"/>
<field name="book_preferences" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_books" type="text_general" indexed="true" stored="true"/>
<field name="art_interests" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_art" type="text_general" indexed="true" stored="true"/>
<field name="health_concerns" type="text_general" indexed="true" stored="true"/>
<field name="health_habits" type="text_general" indexed="true" stored="true"/>
<field name="science_interests" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_science" type="text_general" indexed="true" stored="true"/>
<field name="travel_preferences" type="text_general" indexed="true" stored="true"/>
<field name="travel_experiences" type="text_general" indexed="true" stored="true"/>
<field name="food_preferences" type="text_general" indexed="true" stored="true"/>
<field name="opinions_about_food" type="text_general" indexed="true" stored="true"/>
<field name="last_updated" type="date" indexed="true" stored="true"/>
<field name="channel_id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
<field name="username" type="string" indexed="true" stored="true"/>
<field name="content" type="text_general" indexed="true" stored="true"/>
<field name="timestamp" type="pdate" indexed="true" stored="true"/>
Cambios de confirmación :
Después de agregar todos los campos, comprometa los cambios para que los hagan efectivos.
Después de completar los pasos de instalación y configuración, puede iniciar el bot utilizando los siguientes comandos. La primera ejecución llevará un tiempo, dependiendo de la actividad en su servidor y la cantidad de usuarios. Podría llevar minutos o horas. La salida del terminal le dirá qué está haciendo.
python soupy-solr.py
O
python soupy-flux.py
Y
python gradio-soupy.py
Asegúrese de estar en el entorno virtual y en el directorio correcto donde se encuentra soupy .
gradio-soupy.py es el back-end para Flux. También puede acceder a esto a través de un navegador.
!fluxGenere una imagen utilizando el modelo de flujo con soporte para varios modificadores y botones interactivos para una mayor personalización.
Y con el modificador - -Fancy, o con el botón "Reescribir", por ejemplo:
Modificadores :
--wide : genera una imagen amplia (1920x1024).--tall : genera una imagen alta (1024x1920).--small : genera una imagen pequeña (512x512).--fancy : elabora el aviso para ser más creativo y detallado. Esto usa ChatGPT a través de API.--seed <number> : use una semilla específica para la generación de imágenes.Uso :
!flux A mystical forest with glowing plants --tall
Después de generar una imagen con el comando !flux , Soupy proporciona botones interactivos para una mayor personalización:
Remix : genera una nueva imagen basada en el aviso existente, con una nueva semilla aleatoria.Rewrite : elabora el aviso para mejorar la creatividad y los detalles. Esto usa la API de ChatGPT ( igual que el modificador --fancy ).Wide : ajusta las dimensiones de la imagen a un formato amplio.Tall : ajusta las dimensiones de la imagen a un formato alto. !generateGenere una imagen usando Dall-E 3 basado en un mensaje de texto con modificadores opcionales. Esto puede estar en desuso pronto.
Modificadores :
--wide : genera una imagen amplia (1920x1024).--tall : genera una imagen alta (1024x1920).Uso :
!generate A futuristic city skyline at sunset --wide
!analyzeAnalice una imagen adjunta basada en instrucciones proporcionadas, como traducir texto dentro de la imagen o identificar objetos y sus atributos.
Uso :
!analyze Identify all the animals in this image.
!analyze Describe this image forensically.
Adjunte una imagen cuando use este comando.
!8ballHaga una pregunta a la mágica 8 bolas. No utiliza un LLM ni ningún ML.
Uso :
!8ball Will I get an A on my exam?
!whattimeObtenga y muestre la hora actual en una ciudad específica.
Uso :
!whattime New York
Este proyecto tiene licencia bajo la licencia MIT.
Copyright de licencia del MIT (c) 2024 SNEZEPARTY
El permiso se otorga, de forma gratuita, a cualquier persona que obtenga una copia de este software y archivos de documentación asociados (el "software"), para tratar en el software sin restricción, incluidos los derechos de los derechos para usar, copiar, modificar, fusionar, publicar, distribuir, sublicense y/o vender copias del software, y a las personas a quienes se les proporciona el software que se proporciona el software, lo que se debe hacer que el software sea sujeto a las siguientes condiciones: los avisos anteriores: el aviso de los Copys y esto se anulará a los siguientes. incluido en todas las copias o porciones sustanciales del software.
El software se proporciona "tal cual", sin garantía de ningún tipo, expresa o implícita, incluidas, entre otros, las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. En ningún caso los autores o titulares de derechos de autor serán responsables de cualquier reclamo, daños u otra responsabilidad, ya sea en una acción de contrato, agravio o de otra manera, que surge, de o en relación con el software o el uso u otros tratos en el software.
Si encuentra algún problema o tiene preguntas, no dude en abrir un problema en la sección de problemas de GitHub del repositorio.
Cómprame un café para ayudar a apoyar este proyecto.