Je veux ajouter des téléversements de fichiers
Pour un développeur laissant les utilisateurs remettre des fichiers à l'agent · 10 min · une app minimale fonctionnelle
Vous obtenez un moyen pour l'utilisateur de l'app de téléverser des fichiers dans le répertoire de travail de l'agent, soit depuis la barre de saisie du chat, soit via un téléverseur dédié dans la barre latérale.
Avant de commencer#
- Une app minimale fonctionnelle (Je veux construire une app CoCo minimale).
- Décider du répertoire cible : les téléversements atterrissent sous
CocoOptions.cwddans un sous-répertoire (_uploadspar défaut).
Étapes#
- Pour accepter des fichiers directement depuis la barre de saisie du chat,
définissez
accept_filesurchat_input_bar():prompt = st_coco.chat_input_bar( session, accept_file=True, # ou "multiple" upload_subdir="_uploads", upload_overwrite="replace", # "error" / "replace" / "skip" )Avec
inject_upload_paths=True(le défaut), les chemins des fichiers téléversés sont ajoutés au texte du prompt envoyé à l'agent. - Pour proposer un téléverseur autonome (par exemple dans une barre
latérale), utilisez plutôt
cwd_uploader():with st.sidebar: uploaded = st_coco.cwd_uploader( session, label="Upload a reference file", overwrite="error", )cwd_uploader()encapsulest.file_uploaderet appelleupload_to_cwd()pour vous, et affiche une légende listant ce qui se trouve déjà dans le répertoire de téléversement. - Pour téléverser des fichiers entièrement en dehors d'un widget Streamlit
(par exemple des fichiers déjà lus en mémoire), appelez directement
upload_to_cwd():from streamlit_coco import upload_to_cwd paths = upload_to_cwd( session, # ou un CocoOptions, ou un chemin brut files, subdir="_uploads", overwrite="error", )
Résultat#
Les fichiers téléversés sont écrits sous <CocoOptions.cwd>/_uploads/ (ou le subdir/upload_subdir que vous avez défini), et sont ensuite disponibles pour tout outil de l'agent lisant depuis cwd. cwd_uploader() et upload_to_cwd() retournent tous deux la liste des résultats UploadedPath pour les fichiers qui viennent d'être écrits.
Variations#
upload_to_cwd()a pour défautoverwrite="error"(rejeter un conflit denom) ;
chat_input_bar()a pour défautupload_overwrite="replace"— définissez l'un ou l'autre explicitement si le défaut de votre point d'entrée n'est pas celui que vous voulez.- La taille et l'extension des fichiers sont vérifiées par rapport à
DEFAULT_MAX_BYTES(10 Mio) et à une liste blanche fixe d'extensions de documents/données sûres (streamlit_coco.upload.DEFAULT_ALLOWED_EXTENSIONS), sauf si vous passez vos propresmax_bytes/allowed_extensions.