Abbey es una interfaz de IA con cuadernos, chat básico, documentos, videos de YouTube y más. Orquesta una variedad de modelos de IA en un paquete privado autohospedado. Puede ejecutar Abbey como servidor para múltiples usuarios que usan su propio proveedor de autenticación, o puede ejecutarla usted mismo en su propia máquina. Abbey es altamente configurable, utilizando sus LLM elegidos, modelos TTS, modelos OCR y motores de búsqueda. Puede encontrar una versión alojada de Abbey aquí, que es utilizada por muchos estudiantes y profesionales.
¿Tiene algún problema? ¡Por favor, publique un problema o comuníquese directamente con el Creador! Twitter dm @gkamer8, envíe un correo electrónico a [email protected], o de lo contrario lo haga ping, le gusta.
Si Abbey no es configurable de forma predeterminada para su gusto, y se siente cómodo escribiendo código, ¡considere abrir un PR con sus mejoras! Agregar nuevas integraciones e incluso interfaces completas es sencillo; Vea más detalles en la sección "contribuyente" a continuación.


docker compose . Vea los detalles aquí.Si tiene una versión anterior de Abbey y está haciendo el patrón de "nueva instalación" con settings.yml por primera vez, tire, cree una nueva configuración.yml y .env como se describe a continuación, mueva sus archivos desde el backend/app/static a la almacenamiento de archivos y reconstruya con ---build
La configuración implica clonación/descarga de este repositorio, creando archivos .env y settings.yml con las integraciones de IA elegidas, y luego ejecutar docker compose para el desarrollo (peor rendimiento pero fácil de jugar) o producción (mejor rendimiento pero más lento para cambiar la configuración). Aquí están los pasos:
Paso 1: Clone / Descargue este repositorio y navegue dentro de él.
Paso 2: Cree un archivo llamado .env para claves secretas y un archivo llamado settings.yml para configuración de configuración en la raíz del repositorio (es decir, al mismo nivel que el archivo docker-compose.yml ). Luego, ingrese en esos archivos las teclas / modelos que desea usar. Puede encontrar detalles sobre cómo configurar cada tipo de integración a lo largo de este ReadMe.
El archivo .env contiene cualquier tecla API u otros secretos que necesite. También debe incluir una contraseña para la base de datos MySQL que Abbey usa. Un archivo .env para alguien que usa la API oficial de OpenAI, una API compatible de OpenAI que requiere una llave, y la API antrópica podría parecer:
MYSQL_ROOT_PASSWORD="my-password"
OPENAI_API_KEY="my-openai-key"
OPENAI_COMPATIBLE_KEY="my-api-key"
ANTHROPIC_API_KEY="my-anthropic-key"
El archivo settings.yml configura Abbey para usar los modelos y opciones que desea. Como mínimo, debe usar al menos un modelo de idioma y un modelo de incrustación. Ponga primero los mejores modelos para que Abbey los use de forma predeterminada. Por ejemplo, aquí hay un archivo settings.yml que utiliza modelos de la API oficial de OpenAI, una API compatible de OpenAI, antrópico y Ollama:
lms:
models:
- provider: anthropic
model: "claude-3-5-sonnet-20241022"
name: "Claude 3.5 Sonnet" # optional, give a name for Abbey to use
traits: "Coding" # optional, let Abbey display what it's good for
desc: "One of the best models ever!" # optional, let Abbey show a description
accepts_images: true # optional, put true if the model is a vision model / accepts image input
context_length: 200_000 # optional, defaults to 8192
- provider: openai_compatible
model: "gpt-4o"
accepts_images: true
context_length: 128_000
- provider: ollama
model: "llama3.2"
openai_compatible:
url: "http://host.docker.internal:1234" # Use host.docker.internal for services running on localhost
ollama:
url: "http://host.docker.internal:11434" # Use host.docker.internal for services running on localhost
embeds:
models:
- provider: "openai"
model: "text-embedding-ada-002"
Y dado que también ha puesto las claves relevantes en .env , ese sería un archivo de configuración completo. Para configurar diferentes modelos, motores de búsqueda, servicios de autenticación, modelos de texto a voz, etc.: ¡Busque la documentación apropiada a continuación!
Paso 3: Si todavía estás jugando con tu configuración, puedes ejecutar Abbey en modo Dev simplemente usando:
docker compose up
En el modo Dev, cuando cambia su configuración / secretos, solo necesita reiniciar los contenedores para que su configuración se aplique, lo que se puede hacer con:
docker compose restart backend frontend celery db_pooler
Una vez que esté listo, puede ejecutar Abbey en modo de producción para dar un mejor rendimiento:
docker compose -f docker-compose.prod.yml up --build
Si desea cambiar su configuración / secretos en modo PROD, debe reconstruir los contenedores:
docker compose down
docker compose -f docker-compose.prod.yml up --build
Paso 4: Ahora Abbey debería estar ejecutándose en http://localhost:3000 ! Simplemente visite esa URL en su navegador para comenzar a usar Abbey. En el modo de desarrollo, puede tardar un segundo en cargar.
Tenga en cuenta que el backend se ejecuta en http://localhost:5000 : si va allí, debería ver una letra de Gilbert y el HMS de Sullivan. Si no, entonces el backend no se está ejecutando.
Si algo no funciona bien, por favor (por favor) presente un problema o comuníquese directamente con el creador: @gkamer8 en Twitter o [email protected] por correo electrónico.
Por defecto, Abbey se ejecuta en Localhost en Ports 3000 para el frontend y 5000 para el backend. Si desea alterar estos (ya que es bastante inteligente de tecnología), deberá modificar su archivo de composición de Docker y luego agregar esto a su settings.yml :
services:
backend:
public_url: http://localhost:5000 # Replace with your new user-accessible BACKEND URL
internal_url: http://backend:5000 # This probably won't change - it's where the frontend calls the backend server side, within Docker
frontend:
public_url: http://localhost:3000 # Replace with your new user-accessible FRONTEND URL
Asegúrese de actualizar su archivo de composición de Docker, por ejemplo, cambiando la asignación del puerto para el backend a 1234: 5000, si cambia el puerto. Asegúrese de cambiarlo por el archivo Docker-Compose correcto ( docker-compose.prod.yml para compilaciones de productos, docker-compose.yml para dev). Así es como se vería eso para el backend:
backend:
# ... some stuff
ports:
- "1234:5000" # now the backend is at http://localhost:1234 in my browser
# ... some stuff
General: asegúrese de que todos los contenedores Docker realmente se ejecuten con docker ps . Debería ver 6: backend, frontend, apio, redis, mysql y db_pooler (lamento que haya tantos: Abbey puede hacer tareas de IA en segundo plano y en múltiples hilos, lo que requiere el grupo, redis y contenedores de apio). Si uno no se está ejecutando, intente reiniciarlo con docker compose restart backend (o frontend, o apio, o lo que tiene). Si sigue chocando, hay una buena posibilidad de que haya estropeado su settings.yml u haya olvidado poner los secretos apropiados en .env . De lo contrario, mire los registros.
Docker Config Inválido: si le dice que su composición de Docker no es válido, entonces probablemente necesite actualizar Docker en su máquina a algo> = Versión 2. Abbey aprovecha ciertas características de Docker relativamente nuevas, como valores predeterminados para variables y perfiles ENV. Será más fácil actualizar a Docker a largo plazo: confianza.
Las cosas se ven en blanco / No carguen / las solicitudes al backend no parecen funcionar bien. Primero, navegue al backend en el navegador, me gusta http://localhost:5000 o cualquier URL que haya puesto originalmente. Debería darle un mensaje como "Un alquitrán británico es un alma altísima ..." Si ves eso, entonces el backend está en funcionamiento, pero tu configuración de URL de backend es incorrecta o incompleta (¿estabas jugando con él?). Si su backend no se está ejecutando, consulte los registros en Docker para obtener más información, ¡lea lo que dicen!
Docker se atasca descargando/instalando/ejecutando una imagen. Existe la posibilidad de que se haya quedado sin espacio en su máquina. Primero, intente ejecutar docker system prune para limpiar cualquier cosa desagradable en Docker que haya olvidado. Luego, intente limpiar el espacio en su computadora, tal vez lo suficiente para ~ 10 GB en su máquina. Luego reinicie Docker y vuelva a intentarlo. Si aún tiene problemas, intente desinstalar / reinstalar Docker.
El comando docker compose se niega a ejecutarse debido a algún problema de "API" o algo así. Si Docker se está ejecutando (Docker Desktop en Mac, por ejemplo), entonces debe reiniciarlo. Si eso no ayuda, intente purgar/limpiar sus datos antes de reiniciar (haga clic en el icono "Error" en Docker Desktop si lo tiene, luego vea los datos clean/purge ). Si Docker no se está ejecutando, ¡ese es tu problema! Debe asegurarse de que el Docker Daemon (es decir, Docker Desktop en Mac) se esté ejecutando.
Ya se está utilizando un puerto. El backend de Abbey se ejecuta en el puerto 5000 por defecto; El Abbey Frontend se ejecuta en el puerto 3000. Es posible que algo en su computadora ya esté utilizando el puerto 5000 o el puerto 3000. En Mac, eso generalmente significa AirPlay. Su objetivo debe ser verificar si algo se ejecuta en los puertos 3000 o 5000 y, de ser así, cerrar esos procesos. En Mac/Linux: use lsof -i :5000 o lsof -i :3000 para verificar si algún proceso se ejecuta en esos puertos. Si nota un proceso como 'Controlce' que se ejecuta en Mac, eso significa "Centro de control", y probablemente sea un receptor de AirPlay. Puede ingresar a la configuración de su sistema en Mac y desmarcar "receptor AirPlay". Si encontró algo más, puede matarlo con kill -9 YOUR_PID donde YOUR_PID es reemplazado por la ID del proceso (que se muestra usando LSOF). En Windows: use netstat -ano | findstr :5000 o netstat -ano | findstr :3000 . Luego puede matar el proceso con taskkill /PID YOUR_PID /F - Reemplace YOUR_PID con la ID de proceso del proceso relevante.
Las integraciones de terceros se administran en su configuración y archivos de variables de entorno. Aquí hay un resumen de los disponibles:
Modelos de idiomas (LMS)
Modelos de incrustación (incrustaciones)
Texto a voz (TTS)
Reconocimiento de caracteres ópticos (OCR)
Motores de búsqueda (web)
https://api.bing.microsoft.com/v7.0/search )Almacenamiento de archivos (almacenamiento)
file-storage (predeterminado)Autenticación
Algunas integraciones requieren configuración en Settings.yml. Si usa alguna de las siguientes integraciones, debe especificar su configuración de así ser:
s3:
bucket: 'your-bucket'
searxng:
url: "http://host.docker.internal:8080" # Replace with your URL
ollama:
url: "http://host.docker.internal:11434" # Replace with your URL
openai_compatible:
url: "http://host.docker.internal:12345" # Replace with your URL
Estos van a la raíz de settings.yml al mismo nivel que lms o embeds .
Los modelos de idioma se configuran en lms en settings.yml . Puede especificar modelos de idiomas de cualquier proveedor que desee apoyar, además de los valores predeterminados que se usan detrás de escena para cosas como la generación de preguntas, resúmenes y sugerir preguntas. Debe tener al menos un LM para que Abbey funcione correctamente. Recuerde configurar la configuración del proveedor relevante si es necesario como se muestra arriba.
lms:
defaults: # all are optional, use the optional "code" you specify to refer to each model, or use "model-provider" like "gpt-4o-openai"
chat: "llama3.2-ollama" # User chat model (user can change) - defaults to first listed model
fast: "llama3.2-ollama" # Fastest model, used for suggested questions and other places - defaults to chat model
high_performance: "gpt-4o" # Your best language model, used for generating curricula - defaults to default chat model
long_context: "gpt-4o" # Model used in long-context situations - defaults to longest context model specified
balanced: "claude-3-5-sonnet-anthropic" # Model that is in the middle for speed / accuracy - defaults to default chat model
fast_long_context: "gpt-4o-mini-openai" # A long context model that's fast, defaults to long_context model, used for summaries / key points
alt_long_context: "claude-3-5-sonnet" # A long context model used for variation in things like question generation - default to long_context
models:
- provider: openai # required - see below table for options
model: "gpt-4o" # required, code for the API
context_length: 128_000 # optional (defaults to 4096)
supports_json: true # optional, defaults to false
accepts_images: true # optional, defaults to false
name: "GPT-4o" # optional display name for the model
desc: "One of the best models ever!" # optional, lets Abbey display a description
code: "gpt-4o" # optional - defaults to 'model-provider' like 'gpt-4o-openai' - used to specify defaults above.
disabled: false # optional
# Specify more in a list...
Esta tabla proporciona el código del proveedor para cada proveedor y el nombre de la clave API relevante para colocar en .env :
| Proveedor | Código de proveedor | Nombre de la tecla API | NECESITA ENFORMACIÓN DEL PROVEEDOR |
|---|---|---|---|
| Opadai | opadai | OPERAI_API_KEY | No |
| Antrópico | antrópico | Anthropic_api_key | No |
| Ollama | ollama | Sí | |
| Compatible de OpenAI | OpenAI_Compatible | OpenAI_Compatible_Key | Sí |
Los modelos de texto a voz se configuran en tts en settings.yml . Puede especificar modelos TTS de cualquier proveedor que desee admitir, más un valor predeterminado. Los modelos TTS son totalmente opcionales. Recuerde configurar la configuración del proveedor relevante si es necesario como se muestra arriba.
tts:
default: "openai_onyx"
voices:
- provider: openai # required
voice: "onyx" # required
model: "tts-1" # required
name: "Onyx" # optional
desc: "One of the best models ever!" # optional
code: "openai_onyx" # optional, to set a default via a code (defaults to "voice-model-provider")
sample_url: "https://public-audio-samples.s3.amazonaws.com/onyx.wav" # optional
disabled: false # optional
| Proveedor | Código de proveedor | Nombre de la tecla API | NECESITA ENFORMACIÓN DEL PROVEEDOR |
|---|---|---|---|
| Opadai | opadai | OPERAI_API_KEY | No |
| Once | once_labs | ELEVEN_LABS_API_KEY | No |
| Compatible de OpenAI | OpenAI_Compatible | OpenAI_Compatible_Key | Sí |
Los modelos de incrustación se configuran en embeds en settings.yml . Por ahora, exactamente un modelo de incrustación obligatorio se usa en Abbey a la vez. Los modelos de incrustación se utilizan para buscar documentos. Recuerde configurar la configuración del proveedor relevante si es necesario como se muestra arriba.
embeds:
models:
- provider: "openai" # required
model: "text-embedding-ada-002" # required
| Proveedor | Código de proveedor | Nombre de la tecla API | NECESITA ENFORMACIÓN DEL PROVEEDOR |
|---|---|---|---|
| Opadai | opadai | OPERAI_API_KEY | No |
| Ollama | ollama | Sí | |
| Compatible de OpenAI | OpenAI_Compatible | OpenAI_Compatible_Key | Sí |
Los motores de búsqueda se configuran en web en settings.yml . Se usan cuando verifica Use Web cuando chatea en Abbey. Recuerde configurar la configuración del proveedor relevante si es necesario como se muestra arriba.
web:
engines:
- provider: "bing" # required
# TO USE SEARXNG, MAKE SURE YOUR SEARXNG SETTINGS ARE CORRECT - SEE [BELOW](#searxng)
- provider: "searxng"
- engine: "pubmed" # Only used for SearXNG - leave blank to search over all engines you've enabled
- provider: "searxng"
engine: "arxiv"
use_pdf: true # Some SearXNG engines give PDF URLs - this tells Abbey to go to the PDF rather than the regular result
| Proveedor | Código de proveedor | Nombre de la tecla API | NECESITA ENFORMACIÓN DEL PROVEEDOR |
|---|---|---|---|
| Aturdir | aturdir | Bing_api_key | No |
| Searxng | searxng | Sí |
Searxng no permite por defecto el acceso a la API. Al ejecutar su instancia de Searxng, debe asegurarse de que su configuración Searxng (no en el repositorio de Abbey, sino en searxng/settings.yml ) permita que JSON sea un formato, como:
search:
formats:
- html
- json
Puede asegurarse de que su instancia de Searxng funcione correctamente cuando funcione la siguiente solicitud de curl (reemplace la URL con la URL de su instancia de Searxng: el puerto puede ser diferente).
curl -kLX GET --data-urlencode q='abbey ai' -d format=json http://localhost:8080
Las API de reconocimiento de caracteres ópticos se configuran en ocr en settings.yml . Por defecto, no se usa OCR. Opcionalmente, la configuración de OCR le permite a Abbey leer PDF escaneados. Abbey determina automáticamente si el OCR parece necesario.
ocr:
models:
- provider: "mathpix"
| Proveedor | Código de proveedor | Nombres de clave API | NECESITA ENFORMACIÓN DEL PROVEEDOR |
|---|---|---|---|
| Mathpix | Mathpix | Mathpix_api_app y mathpix_api_key | No |
Las API de correo electrónico se configuran en email en settings.yml . La configuración del correo electrónico le permite a Abbey enviar enlaces a activos en Abbey cuando están compartidos, además de algunas otras circunstancias. Por defecto, Abbey no envía correos electrónicos. Ejecutar Abbey con el perfil de correo electrónico (como docker compose up --profile email ) permite a Abbey enviar correos electrónicos de recordatorio adicionales para algunas plantillas.
email:
default: smtp # Refer to each service by its provider name (defaults to first specified)
services:
- provider: sendgrid # Required
email: "[email protected]" # Required
unsub_group: 24624 # Optional, only for Sendgrid
- provider: smtp # Regular email
email: "[email protected]"
| Proveedor | Código de proveedor | Secretos obligatorios | NECESITA ENFORMACIÓN DEL PROVEEDOR |
|---|---|---|---|
| SendGrid | SendGrid | SendGrid_api_key | No |
| Correo electrónico SMTP | smtp | Smtp_server, smtp_port, smtp_email y smtp_password | No |
Las API de almacenamiento de archivos se configuran en storage en settings.yml . De manera predeterminada, Abbey almacena todos los archivos cargados en la carpeta file-storage montada. Al hacer una copia de seguridad de Abbey, debe hacer una copia de seguridad de esa carpeta más la base de datos. Si desea usar S3, puede usar lo siguiente:
storage:
default: s3 # All new uploads go to the default provider (you don't need to set up local)
locations:
- provider: s3
| Proveedor | Código de proveedor | Nombres de clave API | NECESITA ENFORMACIÓN DEL PROVEEDOR |
|---|---|---|---|
| s3 | s3 | AWS_ACCESS_KEY y AWS_SECRET_KEY | No |
| Local | local | No |
Los proveedores de autenticación están configurados en auth en settings.yml . De forma predeterminada, Abbey usará un solo usuario "predeterminado". La configuración de proveedores de autenticación adicionales permite configuraciones de usuarios múltiples. Puede usar un proveedor de OAuth2 como Google, o puede anotar una instancia de KeyCloak (instrucciones a continuación). Para proveedores como Google y GitHub, necesitará un secreto de cliente y una identificación del cliente. Al registrar Abbey, es posible que deba proporcionar la URL donde se puede acceder a Abbey, eso sería http://localhost:3000 por defecto, o cualquier URL pública que esté utilizando para la frontend de Abbey.
auth:
providers:
- google
- github
- keycloak
| Proveedor | Código de proveedor | Variables de envío | Cómo adquirir ID / secreto del cliente |
|---|---|---|---|
| Google_client_id y Google_Secret | Ver aquí | ||
| Github | github | Github_client_id y github_secret | Ver aquí |
| Cloak | cloak | KeyCloak_Public_url, KeyCloak_internal_url, KeyCloak_Realm, KeyCloak_Secret y KeyCloak_Client_ID | Vea abajo |
En los entornos de producción, también debe proporcionar secretos de autenticación adicionales para manejar tokens de autores. Hágalo agregando lo siguiente a su archivo de entorno:
CUSTOM_AUTH_SECRET="my-auth-secret"
REFRESH_TOKEN_SECRET="my-refresh-secret"
Puede autenticación de auto-anfitrión utilizando completamente KeyCloak. El uso de KeyCloak con Abbey requiere ciertas configuraciones; por ejemplo, se debe especificar una URL frontend para el reino para permitir que Abbey y KeyCloak se ejecuten en la misma VM Docker. Si tiene una instancia de KeyCloak existente, debe crear un nuevo cliente para Abbey con una identificación del cliente y un secreto del cliente que coloca en .env . De lo contrario, aquí hay instrucciones configurando una nueva instancia para Abbey:
Aquí hay un archivo keycloak-realm.json que puede colocar junto a su archivo docker-compose que configura KeyCloak automáticamente:
{
"realm": "abbey-realm",
"enabled": true,
"loginWithEmailAllowed": true,
"duplicateEmailsAllowed": false,
"registrationEmailAsUsername": true,
"attributes": {
"frontendUrl": "http://localhost:8080"
},
"clients": [
{
"clientId": "abbey-client",
"enabled": true,
"protocol": "openid-connect",
"publicClient": false,
"secret": "not-a-secret",
"redirectUris": ["http://localhost:3000/*"]
}
],
"users": [
{
"username": "[email protected]",
"email": "[email protected]",
"enabled": true,
"emailVerified": true,
"credentials": [
{
"type": "password",
"value": "password"
}
]
}
]
}
Aquí hay un servicio de ejemplo que puede ejecutar junto con el archivo docker-compose.yml :
services:
keycloak:
image: quay.io/keycloak/keycloak:22.0.3
container_name: keycloak
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
ports:
- 8080:8080
volumes:
- ./keycloak-realm.json:/opt/keycloak/data/import/myrealm.json
command: ["start-dev", "--import-realm"]
volumes:
keycloak_data:
KeyCloak también requiere algunos secretos adicionales en .env :
# The Public URL should be user accessible
KEYCLOAK_PUBLIC_URL="http://localhost:8080"
# The optional Internal URL should be accessible within Docker
KEYCLOAK_INTERNAL_URL="http://keycloak:8080"
KEYCLOAK_REALM="abbey-realm"
KEYCLOAK_SECRET="not-a-secret"
KEYCLOAK_CLIENT_ID="abbey-client"
Agregar ese servicio + Creación del archivo keycloak-realm.json + Ingresar secretos en .env debería permitir a Abbey "solo trabajar" con KeyCloak en un entorno de desarrollo.
Por defecto, Abbey tiene un servicio MySQL para el cual debe proporcionar un MYSQL_ROOT_PASSWORD en .env . Abbey usa dos bases de datos, custom_auth para autenticación y learn para todo lo demás. Pueden estar en los mismos o diferentes servidores. A partir de ahora, el servidor debe ser compatible con MySQL o MySQL (no Postgres).
Puede cambiar dónde está disponible el servidor MySQL, utilizando estas variables .env :
MYSQL_ROOT_PASSWORD=my-root-password
# Remember that the endpoint is accessed server side, so "mysql" is the default network name
DB_ENDPOINT=mysql
DB_USERNAME=root
DB_PASSWORD=my-root-password
DB_PORT=3306
DB_NAME=learn
DB_TYPE=local # 'local' or 'deployed' --> changes how app deals with transaction settings
# You should set global transaction isolation level to READ COMMITTED when using your own database
CUSTOM_AUTH_DB_ENDPOINT=mysql
CUSTOM_AUTH_DB_USERNAME=root
CUSTOM_AUTH_DB_PASSWORD=my-root-password
CUSTOM_AUTH_DB_PORT=3306
CUSTOM_AUTH_DB_NAME=custom_auth
Cuando se inicia el servicio MySQL predeterminado, se inicializará utilizando los archivos dentro de mysql-init . Si configura su propio servicio MySQL, shouuld inicializa las bases / tablas de datos relevantes ejecutando esos archivos .sql (copiar y pegar en un terminal sería suficiente).
Puede notar que en la página de inicio (mientras está firmado), el lado derecho tiene una imagen y una descripción. En la inicialización de la base de datos, hay una imagen que aparecerá allí de forma predeterminada (que está alojada en Internet). Para cambiar esa imagen, o para agregar más, debe agregar entradas a la tabla Art_history en la base de datos Learn (en el servicio MySQL). Allí colocas una URL para la imagen y el markdown para la descripción. El dominio (s) donde se aloja la imagen también debe incluirse en settings.yml , como así:
images:
domains:
- "my-domain.com"
Para agregar la entrada a Art_history, debe ejecutar algo de SQL. Con Docker-Compose, puede usar:
docker-compose exec mysql mysql -u root -p
y luego use su contraseña de root MySQL (disponible en el archivo .env ubicado en la raíz del proyecto). Luego, deberá ejecutar:
use learn;
INSERT INTO art_history (`markdown`, `image`)
VALUES ('This is my *description*', 'https://my-domain.com/image.webp');
Se selecciona una imagen al azar para mostrar desde esa tabla art_history .
Puede cambiar el nombre de Abbey a lo que quiera usar esta opción en settings.yml :
name: "Abbey" # Replace with your chosen name
Otras marcas, como logotipos, favicones, etc., se encuentran en frontend/public . Puede cambiarlos reemplazando los archivos (pero manteniendo sus nombres). Las imágenes de fondo están en la carpeta frontend/public/random .
Por defecto, Abbey hacer una URL codificada cuando se inicia el backend y cada hora a partir de entonces. Esto se hace para rastrear las estadísticas de uso. La versión de backend en la que se encuentra más su settings.yml está incluida en el ping. Para deshabilitar el ping, coloque lo siguiente en su settings.yml :
ping: false
Como no puedo distinguir entre un usuario que ha establecido ping: false y un usuario que ha dejado de usar Abbey, considere comunicarse con [email protected] para que pueda obtener un número aproximado de usuarios que deshabilitan el ping.
Una de las principales fortalezas de Abbey es su extensibilidad. Puede implementar nuevas integraciones e interfaces directamente.
Cada tipo de integración, excepto Auth (ver notas a continuación), reside en un archivo en backend/app/integrations . Cada tipo de integración implementa una clase específica (por ejemplo, lm.py proporciona una clase LM, y cada tipo de integración implementa esa clase). Simplemente puede agregar una clase que herede de la clase base (LM, TTS, OCR, etc.). Luego, debe agregar su clase al diccionario PROVIDER_TO_ (hay uno diferente para cada tipo de integración). Para las integraciones que el usuario puede elegir, debe aparecer automáticamente una vez que se haya realizado el cambio apropiado en settings.yml (por ejemplo, un usuario puede seleccionar su motor de búsqueda, modelo de idioma y modelo de texto a voz). Para integraciones como embed que eligen Abbey de forma predeterminada, debe asegurarse de que su integración sea el valor predeterminado en settings.yml .
Si su integración se basa en los secretos, debe agregarla a backend/app/configs/secrets.py usando el patrón especificado y luego importarlo al archivo de integración (por ejemplo, lm.py ).
A diferencia de las otras integraciones, si simplemente está agregando un proveedor de OAuth2, de hecho no hay razón para hacer nada en el backend frascos. El servidor de frontend de Next.js maneja todo. Lo que necesitas hacer es:
frontend/src/pages/api/auth/[...auth].js . El ejemplo más simple es la clase Googleauth (que extiende BaseAuth) que proporciona tres URL: un punto final de autenticación OAuth2; un punto final de token OAuth2; y un punto final de información del usuario de OpenID Connect. Dado que GitHub no implementa OpenID Connect estándar, implementa la función getUserData () directamente.authProviders en función de la disponibilidad de secretos.frontend/src/auth/custom.js . Primero, eso significa presionar a enabledProviders el código de su nuevo proveedor condicionalmente en función de si una variable de entorno se establece en 1 (la variable de entorno debe comenzar con Next_Public para que esté disponible en el lado del cliente). En segundo lugar, eso significa agregar un objeto a la lista providers que especifica el código de su proveedor y el valor del botón (puede agregar el logotipo de su proveedor siguiendo el patrón y agregando el logotipo a frontend/public/random ). Una nota en los motores de búsqueda: algunas funciones de clase para un motor de búsqueda devuelve objetos de búsqueda personalizados; Las clases relevantes se implementan en web.py , y debe echar un vistazo si elige implementar una nueva integración de motores de búsqueda.
En Abbey, todo es un "activo", y cada activo implementa una "plantilla". Por ejemplo, si carga un documento, se convierte en un "activo" del document de plantilla. Del mismo modo, si crea un nuevo espacio de trabajo, se convierte en un "activo" del notebook de plantilla (el nombre interno para un espacio de trabajo). En la interfaz, la interfaz proporcionada a un usuario está determinada por la plantilla que está viendo. Hay una lenta de variables comunes que deben establecerse para cada plantilla (por ejemplo, si la plantilla puede ser conversada o no, si está en una carpeta o algo así). Esas variables y funciones implementadas determinan, entre otras cosas, la forma en que se comportan los puntos finales generales como /asset/chat .
En el backend, todas las plantillas son clases que heredan de la clase base Template . Estas plantillas se encuentran en sus propios archivos en backend/app/templates . Las plantillas están registradas en backend/app/templates.py . Debe agregar una instancia de su plantilla allí para habilitarla. También debe agregar la plantilla a backend/app/configs/user_config.py . Dentro de un archivo de plantilla también pueden ser puntos finales específicos para esa plantilla; Si elige crear uno, debe registrarse en backend/app/__init__.py .
En el frontend, todas las plantillas se implementan en un archivo, frontend/src/template.js . Cada plantilla hay una clase que hereda de la clase Template . En la parte inferior del archivo, hay varias listas y objetos que determinan la disponibilidad de la plantilla; Al menos, al menos debe agregar su plantilla al objeto de TEMPLATES para ponerla a disposición de los usuarios.
Algunas plantillas son como hojas; Por ejemplo, los documentos no tienen fuentes de activos vinculadas, lo que significa que cuando chatea con un documento, realmente está chateando solo con ese documento. Otras plantillas tienen fuentes vinculadas. Por ejemplo, el contenido de una carpeta son activos vinculados. Este sistema existe para otras plantillas como el editor de texto, que puede obtener material de otros activos con su funcionalidad de escritura de IA. El uso de fuentes de manera consistente asegura que la funcionalidad que se extienda a través de las plantillas, como compartir activos, siga siendo funcional. Si comparte una carpeta con alguien, por ejemplo, los permisos se propagan a todos los elementos dentro de esa carpeta.
La forma estándar de recuperar información sobre las fuentes de un activo en la interfaz es con el punto final /assets/sources-info . La forma estándar de agregar una fuente a un activo es con los puntos finales /assets/add-resource y /assets/add-resources . Estos puntos finales están buscando una entrada en la tabla asset_metadata con retrieval_source de clave_Source cuyo valor es una ID de activo. Vea más detalles sobre esos puntos finales en backend/app/assets.py .