Add i18n support for official website (#2463)

* feat(i18n): initial i18n setup

- Configured i18n settings in docusaurus.config.js
- Implemented Translate component and translate function in key components

* docs(i18n): complete documentation internationalization

- Added support for Simplified Chinese and French

* Update docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/troubleshooting/troubleshooting.md

* Update docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/troubleshooting/troubleshooting.md

* Update docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/usage/troubleshooting/troubleshooting.md

* fix(build): resolve broken links causing build failure

- Fix issue causing build errors due to broken links in Docusaurus documentation.
- Resolve uncontrolled resource consumption in braces (see: https://github.com/advisories/GHSA-grv7-fg5c-xmjg).
- Bump Docusaurus to ^3.4.0 to fix MDX loader: linkify should process the md AST instead of the md string.

* fix: sync with commit 868b746

-  Change to `docusaurus write-translations` to provide translation for JSON files.

---------

Co-authored-by: Yufan Song <33971064+yufansong@users.noreply.github.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
This commit is contained in:
Arno.Edwards 2024-06-23 23:13:04 +08:00 committed by GitHub
parent 868b7460d4
commit e1caf1db33
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
44 changed files with 3565 additions and 2081 deletions

View File

@ -23,8 +23,13 @@ const config: Config = {
// useful metadata like html lang. For example, if your site is Chinese, you
// may want to replace "en" with "zh-Hans".
i18n: {
defaultLocale: "en",
locales: ["en"],
defaultLocale: 'en',
locales: ['en', 'fr', 'zh-Hans'],
localeConfigs: {
en: {
htmlLang: 'en-GB',
},
},
},
presets: [
@ -78,6 +83,10 @@ const config: Config = {
label: "GitHub",
position: "right",
},
{
type: 'localeDropdown',
position: 'left',
},
],
},
prism: {

406
docs/i18n/fr/code.json Normal file
View File

@ -0,0 +1,406 @@
{
"footer.title": {
"message": "OpenDevin"
},
"footer.docs": {
"message": "Docs"
},
"footer.community": {
"message": "Community"
},
"footer.copyright": {
"message": "Copyright © {year} OpenDevin"
},
"faq.title": {
"message": "Frequently Asked Questions",
"description": "FAQ Title"
},
"faq.description": {
"message": "Frequently Asked Questions"
},
"faq.section.title.1": {
"message": "What is OpenDevin?",
"description": "First Section Title"
},
"faq.section.highlight": {
"message": "OpenDevin",
"description": "Highlight Text"
},
"faq.section.description.1": {
"message": "is an autonomous software engineer that can solve software engineering and web-browsing tasks end-to-end. It can perform data science queries, such as \"Find the number of pull requests to the OpenDevin repository in the last month,\" and software engineering tasks, such as \"Please add tests to this file and verify that all the tests pass. If they don't fix the file.\"",
"description": "Description for OpenDevin"
},
"faq.section.description.2": {
"message": "At the same time, OpenDevin is a platform and community for agent developers to test out and evaluate new agents.",
"description": "Further Description for OpenDevin"
},
"faq.section.title.2": {
"message": "Support",
"description": "Support Section Title"
},
"faq.section.support.answer": {
"message": "Please file a bug on {githubLink} if you notice a problem that likely affects others. If you're having trouble installing, or have general questions, reach out on {discordLink} or {slackLink}.",
"description": "Support Answer"
},
"faq.section.title.3": {
"message": "How to fix a GitHub issue with OpenDevin?",
"description": "GitHub Issue Section Title"
},
"faq.section.github.steps.intro": {
"message": "To fix an issue on GitHub using OpenDevin, send a prompt to OpenDevin asking it to follow steps like the following:",
"description": "GitHub Steps Introduction"
},
"faq.section.github.step1": {
"message": "Read the issue https://github.com/OpenDevin/OpenDevin/issues/1611",
"description": "GitHub Step 1"
},
"faq.section.github.step2": {
"message": "Clone the repository and check out a new branch",
"description": "GitHub Step 2"
},
"faq.section.github.step3": {
"message": "Based on the instructions in the issue description, modify files to fix the issue",
"description": "GitHub Step 3"
},
"faq.section.github.step4": {
"message": "Push the resulting output to GitHub using the GITHUB_TOKEN environment variable",
"description": "GitHub Step 4"
},
"faq.section.github.step5": {
"message": "Tell me the link that I need to go to to send a pull request",
"description": "GitHub Step 5"
},
"faq.section.github.steps.preRun": {
"message": "Before you run OpenDevin, you can do:",
"description": "GitHub Steps Pre-Run"
},
"faq.section.github.steps.tokenInfo": {
"message": "where XXX is a GitHub token that you created that has permissions to push to the OpenDevin repo. If you dont have write permission to the OpenDevin repo, you might need to change that to:",
"description": "GitHub Steps Token Info"
},
"faq.section.github.steps.usernameInfo": {
"message": "where USERNAME is your GitHub username.",
"description": "GitHub Steps Username Info"
},
"faq.section.title.4": {
"message": "How is OpenDevin different from Devin?",
"description": "Devin Section Title"
},
"faq.section.devin.linkText": {
"message": "Devin",
"description": "Devin Link Text"
},
"faq.section.devin.description": {
"message": "is a commercial product by Cognition Inc., that served as the initial inspiration for OpenDevin. They both aim to do a good job at solving software engineering tasks, but OpenDevin you can download, use, and modify, while Devin you can only use through the Cognition site. In addition, OpenDevin has evolved beyond the initial inspiration, and now serves as a community-driven ecosystem for agent development in general, and we'd love to have you join and",
"description": "Devin Description"
},
"faq.section.devin.contribute": {
"message": "contribute",
"description": "Contribute Link"
},
"faq.section.title.5": {
"message": "How is OpenDevin different from ChatGPT?",
"description": "ChatGPT Section Title"
},
"faq.section.chatgpt.description": {
"message": "ChatGPT you can access online, it does not interface with local files, and its ability to execute code is limited. So it can write code, but it is not easy to test or execute it.",
"description": "ChatGPT Description"
},
"homepage.description": {
"message": "AI-powered code generation for software engineering.",
"description": "The homepage description"
},
"homepage.getStarted": {
"message": "Get Started"
},
"welcome.message": {
"message": "Welcome to OpenDevin, an open-source autonomous AI software engineer that is capable of executing complex engineering tasks and collaborating actively with users on software development projects."
},
"theme.ErrorPageContent.title": {
"message": "Cette page a planté.",
"description": "The title of the fallback page when the page crashed"
},
"theme.BackToTopButton.buttonAriaLabel": {
"message": "Retour au début de la page",
"description": "The ARIA label for the back to top button"
},
"theme.blog.archive.title": {
"message": "Archive",
"description": "The page & hero title of the blog archive page"
},
"theme.blog.archive.description": {
"message": "Archive",
"description": "The page & hero description of the blog archive page"
},
"theme.blog.paginator.navAriaLabel": {
"message": "Pagination de la liste des articles du blog",
"description": "The ARIA label for the blog pagination"
},
"theme.blog.paginator.newerEntries": {
"message": "Nouvelles entrées",
"description": "The label used to navigate to the newer blog posts page (previous page)"
},
"theme.blog.paginator.olderEntries": {
"message": "Anciennes entrées",
"description": "The label used to navigate to the older blog posts page (next page)"
},
"theme.blog.post.paginator.navAriaLabel": {
"message": "Pagination des articles du blog",
"description": "The ARIA label for the blog posts pagination"
},
"theme.blog.post.paginator.newerPost": {
"message": "Article plus récent",
"description": "The blog post button label to navigate to the newer/previous post"
},
"theme.blog.post.paginator.olderPost": {
"message": "Article plus ancien",
"description": "The blog post button label to navigate to the older/next post"
},
"theme.blog.post.plurals": {
"message": "Un article|{count} articles",
"description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.blog.tagTitle": {
"message": "{nPosts} tagués avec « {tagName} »",
"description": "The title of the page for a blog tag"
},
"theme.tags.tagsPageLink": {
"message": "Voir tous les tags",
"description": "The label of the link targeting the tag list page"
},
"theme.colorToggle.ariaLabel": {
"message": "Basculer entre le mode sombre et clair (actuellement {mode})",
"description": "The ARIA label for the navbar color mode toggle"
},
"theme.colorToggle.ariaLabel.mode.dark": {
"message": "mode sombre",
"description": "The name for the dark color mode"
},
"theme.colorToggle.ariaLabel.mode.light": {
"message": "mode clair",
"description": "The name for the light color mode"
},
"theme.docs.breadcrumbs.navAriaLabel": {
"message": "Fil d'Ariane",
"description": "The ARIA label for the breadcrumbs"
},
"theme.docs.DocCard.categoryDescription.plurals": {
"message": "1 élément|{count} éléments",
"description": "The default description for a category card in the generated index about how many items this category includes"
},
"theme.docs.paginator.navAriaLabel": {
"message": "Pages de documentation",
"description": "The ARIA label for the docs pagination"
},
"theme.docs.paginator.previous": {
"message": "Précédent",
"description": "The label used to navigate to the previous doc"
},
"theme.docs.paginator.next": {
"message": "Suivant",
"description": "The label used to navigate to the next doc"
},
"theme.docs.tagDocListPageTitle.nDocsTagged": {
"message": "Un document tagué|{count} documents tagués",
"description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.docs.tagDocListPageTitle": {
"message": "{nDocsTagged} avec \"{tagName}\"",
"description": "The title of the page for a docs tag"
},
"theme.docs.versionBadge.label": {
"message": "Version: {versionLabel}"
},
"theme.docs.versions.unreleasedVersionLabel": {
"message": "Ceci est la documentation de la prochaine version {versionLabel} de {siteTitle}.",
"description": "The label used to tell the user that he's browsing an unreleased doc version"
},
"theme.docs.versions.unmaintainedVersionLabel": {
"message": "Ceci est la documentation de {siteTitle} {versionLabel}, qui n'est plus activement maintenue.",
"description": "The label used to tell the user that he's browsing an unmaintained doc version"
},
"theme.docs.versions.latestVersionSuggestionLabel": {
"message": "Pour une documentation à jour, consultez la {latestVersionLink} ({versionLabel}).",
"description": "The label used to tell the user to check the latest version"
},
"theme.docs.versions.latestVersionLinkLabel": {
"message": "dernière version",
"description": "The label used for the latest version suggestion link label"
},
"theme.common.editThisPage": {
"message": "Éditer cette page",
"description": "The link label to edit the current page"
},
"theme.common.headingLinkTitle": {
"message": "Lien direct vers {heading}",
"description": "Title for link to heading"
},
"theme.lastUpdated.atDate": {
"message": " le {date}",
"description": "The words used to describe on which date a page has been last updated"
},
"theme.lastUpdated.byUser": {
"message": " par {user}",
"description": "The words used to describe by who the page has been last updated"
},
"theme.lastUpdated.lastUpdatedAtBy": {
"message": "Dernière mise à jour{atDate}{byUser}",
"description": "The sentence used to display when a page has been last updated, and by who"
},
"theme.navbar.mobileVersionsDropdown.label": {
"message": "Versions",
"description": "The label for the navbar versions dropdown on mobile view"
},
"theme.NotFound.title": {
"message": "Page introuvable",
"description": "The title of the 404 page"
},
"theme.tags.tagsListLabel": {
"message": "Tags :",
"description": "The label alongside a tag list"
},
"theme.admonition.caution": {
"message": "attention",
"description": "The default label used for the Caution admonition (:::caution)"
},
"theme.admonition.danger": {
"message": "danger",
"description": "The default label used for the Danger admonition (:::danger)"
},
"theme.admonition.info": {
"message": "info",
"description": "The default label used for the Info admonition (:::info)"
},
"theme.admonition.note": {
"message": "remarque",
"description": "The default label used for the Note admonition (:::note)"
},
"theme.admonition.tip": {
"message": "astuce",
"description": "The default label used for the Tip admonition (:::tip)"
},
"theme.admonition.warning": {
"message": "attention",
"description": "The default label used for the Warning admonition (:::warning)"
},
"theme.AnnouncementBar.closeButtonAriaLabel": {
"message": "Fermer",
"description": "The ARIA label for close button of announcement bar"
},
"theme.blog.sidebar.navAriaLabel": {
"message": "Navigation article de blog récent",
"description": "The ARIA label for recent posts in the blog sidebar"
},
"theme.CodeBlock.copied": {
"message": "Copié",
"description": "The copied button label on code blocks"
},
"theme.CodeBlock.copyButtonAriaLabel": {
"message": "Copier le code",
"description": "The ARIA label for copy code blocks button"
},
"theme.CodeBlock.copy": {
"message": "Copier",
"description": "The copy button label on code blocks"
},
"theme.CodeBlock.wordWrapToggle": {
"message": "Activer/désactiver le retour à la ligne",
"description": "The title attribute for toggle word wrapping button of code block lines"
},
"theme.DocSidebarItem.expandCategoryAriaLabel": {
"message": "Développer la catégorie '{label}' de la barre latérale",
"description": "The ARIA label to expand the sidebar category"
},
"theme.DocSidebarItem.collapseCategoryAriaLabel": {
"message": "Réduire la catégorie '{label}' de la barre latérale",
"description": "The ARIA label to collapse the sidebar category"
},
"theme.NavBar.navAriaLabel": {
"message": "Main",
"description": "The ARIA label for the main navigation"
},
"theme.navbar.mobileLanguageDropdown.label": {
"message": "Langues",
"description": "The label for the mobile language switcher dropdown"
},
"theme.NotFound.p1": {
"message": "Nous n'avons pas trouvé ce que vous recherchez.",
"description": "The first paragraph of the 404 page"
},
"theme.NotFound.p2": {
"message": "Veuillez contacter le propriétaire du site qui vous a lié à l'URL d'origine et leur faire savoir que leur lien est cassé.",
"description": "The 2nd paragraph of the 404 page"
},
"theme.TOCCollapsible.toggleButtonLabel": {
"message": "Sur cette page",
"description": "The label used by the button on the collapsible TOC component"
},
"theme.blog.post.readMore": {
"message": "Lire plus",
"description": "The label used in blog post item excerpts to link to full blog posts"
},
"theme.blog.post.readMoreLabel": {
"message": "En savoir plus sur {title}",
"description": "The ARIA label for the link to full blog posts from excerpts"
},
"theme.blog.post.readingTime.plurals": {
"message": "Une minute de lecture|{readingTime} minutes de lecture",
"description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.docs.breadcrumbs.home": {
"message": "Page d'accueil",
"description": "The ARIA label for the home page in the breadcrumbs"
},
"theme.docs.sidebar.collapseButtonTitle": {
"message": "Réduire le menu latéral",
"description": "The title attribute for collapse button of doc sidebar"
},
"theme.docs.sidebar.collapseButtonAriaLabel": {
"message": "Réduire le menu latéral",
"description": "The title attribute for collapse button of doc sidebar"
},
"theme.docs.sidebar.navAriaLabel": {
"message": "Docs sidebar",
"description": "The ARIA label for the sidebar navigation"
},
"theme.docs.sidebar.closeSidebarButtonAriaLabel": {
"message": "Fermer la barre de navigation",
"description": "The ARIA label for close button of mobile sidebar"
},
"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": {
"message": "← Retour au menu principal",
"description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"
},
"theme.docs.sidebar.toggleSidebarButtonAriaLabel": {
"message": "Ouvrir/fermer la barre de navigation",
"description": "The ARIA label for hamburger menu button of mobile navigation"
},
"theme.docs.sidebar.expandButtonTitle": {
"message": "Déplier le menu latéral",
"description": "The ARIA label and title attribute for expand button of doc sidebar"
},
"theme.docs.sidebar.expandButtonAriaLabel": {
"message": "Déplier le menu latéral",
"description": "The ARIA label and title attribute for expand button of doc sidebar"
},
"theme.ErrorPageContent.tryAgain": {
"message": "Réessayer",
"description": "The label of the button to try again rendering when the React error boundary captures an error"
},
"theme.common.skipToMainContent": {
"message": "Aller au contenu principal",
"description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"
},
"theme.tags.tagsPageTitle": {
"message": "Tags",
"description": "The title of the tag list page"
},
"theme.unlistedContent.title": {
"message": "Page non répertoriée",
"description": "The unlisted content banner title"
},
"theme.unlistedContent.message": {
"message": "Cette page n'est pas répertoriée. Les moteurs de recherche ne l'indexeront pas, et seuls les utilisateurs ayant un lien direct peuvent y accéder.",
"description": "The unlisted content banner message"
}
}

View File

@ -0,0 +1,14 @@
{
"title": {
"message": "Blog",
"description": "The title for the blog used in SEO"
},
"description": {
"message": "Blog",
"description": "The description for the blog used in SEO"
},
"sidebar.title": {
"message": "Articles récents",
"description": "The label for the left sidebar"
}
}

View File

@ -0,0 +1,18 @@
{
"version.label": {
"message": "Next",
"description": "The label for version current"
},
"sidebar.docsSidebar.category.🤖 Backends LLM": {
"message": "🤖 Backends LLM",
"description": "The label for category 🤖 Backends LLM in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.🚧 Dépannage": {
"message": "🚧 Dépannage",
"description": "The label for category 🚧 Dépannage in sidebar docsSidebar"
},
"sidebar.apiSidebar.category.Backend": {
"message": "Backend",
"description": "The label for category Backend in sidebar apiSidebar"
}
}

View File

@ -0,0 +1,3 @@
# Documentation Python
Les documents apparaîtront ici après le déploiement.

View File

@ -0,0 +1,7 @@
```json
{
"items": ["python/python"],
"label": "Backend",
"type": "categorie"
}
```

View File

@ -0,0 +1,53 @@
---
sidebar_position: 7
---
# 📚 Divers {#misc}
## ⭐️ Stratégie de Recherche {#research-strategy}
La réalisation d'une réplication complète des applications de production avec les LLM est une entreprise complexe. Notre stratégie implique :
1. **Recherche Technique de Base :** Se concentrer sur la recherche fondamentale pour comprendre et améliorer les aspects techniques de la génération et de la gestion de code.
2. **Compétences Spécialisées :** Améliorer l'efficacité des composants de base grâce à la curation des données, aux méthodes de formation, et plus encore.
3. **Planification des Tâches :** Développer des capacités pour la détection de bogues, la gestion du code source et l'optimisation.
4. **Évaluation :** Établir des métriques d'évaluation complètes pour mieux comprendre et améliorer nos modèles.
## 🚧 Agent Par Défaut {#default-agent}
- Notre agent par défaut est actuellement le CodeActAgent, capable de générer du code et de gérer des fichiers. Nous travaillons sur d'autres implémentations d'agents, y compris [SWE Agent](https://swe-agent.com/). Vous pouvez [lire à propos de notre ensemble actuel d'agents ici](./agents).
## 🤝 Comment Contribuer {#how-to-contribute}
OpenDevin est un projet communautaire, et nous accueillons les contributions de tout le monde. Que vous soyez développeur, chercheur, ou simplement enthousiaste à l'idée de faire progresser le domaine de l'ingénierie logicielle avec l'IA, il existe de nombreuses façons de vous impliquer :
- **Contributions de Code :** Aidez-nous à développer les fonctionnalités de base, l'interface frontend ou les solutions de sandboxing.
- **Recherche et Évaluation :** Contribuez à notre compréhension des LLM en ingénierie logicielle, participez à l'évaluation des modèles ou suggérez des améliorations.
- **Retour d'Information et Tests :** Utilisez l'ensemble d'outils OpenDevin, signalez des bogues, suggérez des fonctionnalités ou fournissez des retours sur l'ergonomie.
Pour plus de détails, veuillez consulter [ce document](https://github.com/OpenDevin/OpenDevin/blob/main/CONTRIBUTING.md).
## 🤖 Rejoignez Notre Communauté {#join-our-community}
Nous avons maintenant à la fois un espace de travail Slack pour la collaboration sur la construction d'OpenDevin et un serveur Discord pour discuter de tout ce qui est lié, par exemple, à ce projet, aux LLM, aux agents, etc.
- [Espace de travail Slack](https://join.slack.com/t/opendevin/shared_invite/zt-2jsrl32uf-fTeeFjNyNYxqSZt5NPY3fA)
- [Serveur Discord](https://discord.gg/ESHStjSjD4)
Si vous souhaitez contribuer, n'hésitez pas à rejoindre notre communauté. Simplifions l'ingénierie logicielle ensemble !
🐚 **Codez moins, créez plus avec OpenDevin.**
[![Star History Chart](https://api.star-history.com/svg?repos=OpenDevin/OpenDevin&type=Date)](https://star-history.com/#OpenDevin/OpenDevin&Date)
## 🛠️ Construit Avec {#built-with}
OpenDevin est construit en utilisant une combinaison de cadres et de bibliothèques puissants, offrant une base robuste pour son développement. Voici les technologies clés utilisées dans le projet :
![FastAPI](https://img.shields.io/badge/FastAPI-black?style=for-the-badge) ![uvicorn](https://img.shields.io/badge/uvicorn-black?style=for-the-badge) ![LiteLLM](https://img.shields.io/badge/LiteLLM-black?style=for-the-badge) ![Docker](https://img.shields.io/badge/Docker-black?style=for-the-badge) ![Ruff](https://img.shields.io/badge/Ruff-black?style=for-the-badge) ![MyPy](https://img.shields.io/badge/MyPy-black?style=for-the-badge) ![LlamaIndex](https://img.shields.io/badge/LlamaIndex-black?style=for-the-badge) ![React](https://img.shields.io/badge/React-black?style=for-the-badge)
Veuillez noter que la sélection de ces technologies est en cours, et que des technologies supplémentaires peuvent être ajoutées ou des existantes supprimées au fur et à mesure de l'évolution du projet. Nous nous efforçons d'adopter les outils les plus adaptés et efficaces pour améliorer les capacités d'OpenDevin.
## 📜 Licence {#license}
Distribué sous la licence MIT. Voir [notre licence](https://github.com/OpenDevin/OpenDevin/blob/main/LICENSE) pour plus d'informations.

View File

@ -0,0 +1,142 @@
---
sidebar_position: 3
---
# 🧠 Agents et Capacités
## Agent CodeAct
### Description
Cet agent implémente l'idée CodeAct ([article](https://arxiv.org/abs/2402.01030), [tweet](https://twitter.com/xingyaow_/status/1754556835703751087)) qui consolide les **act**ions des agents LLM en un espace d'action **code** unifié pour à la fois la _simplicité_ et la _performance_ (voir article pour plus de détails).
L'idée conceptuelle est illustrée ci-dessous. À chaque tour, l'agent peut :
1. **Converse** : Communiquer avec les humains en langage naturel pour demander des clarifications, des confirmations, etc.
2. **CodeAct** : Choisir d'accomplir la tâche en exécutant du code
- Exécuter toute commande `bash` Linux valide
- Exécuter tout code `Python` valide avec [un interpréteur Python interactif](https://ipython.org/). Cela est simulé à travers la commande `bash`, voir le système de plugin ci-dessous pour plus de détails.
![image](https://github.com/OpenDevin/OpenDevin/assets/38853559/92b622e3-72ad-4a61-8f41-8c040b6d5fb3)
### Système de Plugin
Pour rendre l'agent CodeAct plus puissant avec seulement l'accès à l'espace d'action `bash`, l'agent CodeAct exploite le système de plugins d'OpenDevin:
- [Plugin Jupyter](https://github.com/OpenDevin/OpenDevin/tree/main/opendevin/runtime/plugins/jupyter) : pour l'exécution d'IPython via la commande bash
- [Plugin outil agent SWE](https://github.com/OpenDevin/OpenDevin/tree/main/opendevin/runtime/plugins/swe_agent_commands) : Outils de ligne de commande bash puissants pour les tâches de développement logiciel introduits par [swe-agent](https://github.com/princeton-nlp/swe-agent).
### Démonstration
https://github.com/OpenDevin/OpenDevin/assets/38853559/f592a192-e86c-4f48-ad31-d69282d5f6ac
_Exemple de CodeActAgent avec `gpt-4-turbo-2024-04-09` effectuant une tâche de science des données (régression linéaire)_
### Actions
`Action`,
`CmdRunAction`,
`IPythonRunCellAction`,
`AgentEchoAction`,
`AgentFinishAction`,
`AgentTalkAction`
### Observations
`CmdOutputObservation`,
`IPythonRunCellObservation`,
`AgentMessageObservation`,
`UserMessageObservation`
### Méthodes
| Méthode | Description |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `__init__` | Initialise un agent avec `llm` et une liste de messages `list[Mapping[str, str]]` |
| `step` | Effectue une étape en utilisant l'agent CodeAct. Cela inclut la collecte d'informations sur les étapes précédentes et invite le modèle à exécuter une commande. |
| `search_memory` | Pas encore implémenté |
### En cours de réalisation & prochaine étape
[] Support de la navigation sur le web
[] Compléter le workflow pour l'agent CodeAct afin de soumettre des PRs Github
## Agent Monologue
### Description
L'agent Monologue utilise la mémoire à long terme et à court terme pour accomplir des tâches.
La mémoire à long terme est stockée en tant qu'objet LongTermMemory et le modèle l'utilise pour rechercher des exemples du passé.
La mémoire à court terme est stockée en tant qu'objet Monologue et le modèle peut la condenser si nécessaire.
### Actions
`Action`,
`NullAction`,
`CmdRunAction`,
`FileWriteAction`,
`FileReadAction`,
`AgentRecallAction`,
`BrowseURLAction`,
`GithubPushAction`,
`AgentThinkAction`
### Observations
`Observation`,
`NullObservation`,
`CmdOutputObservation`,
`FileReadObservation`,
`AgentRecallObservation`,
`BrowserOutputObservation`
### Méthodes
| Méthode | Description |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `__init__` | Initialise l'agent avec une mémoire à long terme et un monologue interne |
| `_add_event` | Ajoute des événements au monologue de l'agent et condense avec un résumé automatiquement si le monologue est trop long |
| `_initialize` | Utilise la liste `INITIAL_THOUGHTS` pour donner à l'agent un contexte pour ses capacités et comment naviguer dans le `/workspace` |
| `step` | Modifie l'état actuel en ajoutant les actions et observations les plus récentes, puis invite le modèle à réfléchir à la prochaine action à entreprendre. |
| `search_memory` | Utilise `VectorIndexRetriever` pour trouver des souvenirs liés à la mémoire à long terme. |
## Agent Planificateur
### Description
L'agent planificateur utilise une stratégie d'incitation spéciale pour créer des plans à long terme pour résoudre les problèmes.
L'agent reçoit ses paires action-observation précédentes, la tâche actuelle, et un indice basé sur la dernière action effectuée à chaque étape.
### Actions
`NullAction`,
`CmdRunAction`,
`CmdKillAction`,
`BrowseURLAction`,
`GithubPushAction`,
`FileReadAction`,
`FileWriteAction`,
`AgentRecallAction`,
`AgentThinkAction`,
`AgentFinishAction`,
`AgentSummarizeAction`,
`AddTaskAction`,
`ModifyTaskAction`,
### Observations
`Observation`,
`NullObservation`,
`CmdOutputObservation`,
`FileReadObservation`,
`AgentRecallObservation`,
`BrowserOutputObservation`
### Méthodes
| Méthode | Description |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `__init__` | Initialise un agent avec `llm` |
| `step` | Vérifie si l'étape actuelle est terminée, retourne `AgentFinishAction` si oui. Sinon, crée une incitation de planification et l'envoie au modèle pour inférence, en ajoutant le résultat comme prochaine action. |
| `search_memory` | Pas encore implémenté |

View File

@ -0,0 +1,50 @@
---
sidebar_position: 4
---
# 🏛️ Aperçu de l'Architecture Système
Voici un aperçu de haut niveau de l'architecture du système. Le système est divisé en deux composants principaux : le frontend et le backend. Le frontend est responsable de la gestion des interactions avec l'utilisateur et de l'affichage des résultats. Le backend est responsable de la gestion de la logique métier et de l'exécution des agents.
![system_architecture.svg](/img/system_architecture.svg)
Cet aperçu est simplifié pour montrer les principaux composants et leurs interactions. Pour une vue plus détaillée de l'architecture du backend, consultez la section [Architecture du Backend](#backend-architecture-fr).
# Architecture du Backend {#backend-architecture-fr}
_**Avertissement**: L'architecture du backend est en cours de développement et est sujette à modifications. Le schéma suivant montre l'architecture actuelle du backend basée sur le commit indiqué dans le pied de page du schéma._
![backend_architecture.svg](/img/backend_architecture.svg)
<details>
<summary>Mise à jour de ce Schéma</summary>
<div>
La génération du schéma d'architecture du backend est partiellement automatisée.
Le schéma est généré à partir des annotations de type dans le code en utilisant l'outil py2puml.
Le schéma est ensuite revu manuellement, ajusté et exporté en PNG et SVG.
## Prérequis
- Un environnement Python dans lequel opendevin est exécutable
(selon les instructions du fichier README.md à la racine du dépôt)
- [py2puml](https://github.com/lucsorel/py2puml) installé
## Étapes
1. Générez automatiquement le schéma en exécutant la commande suivante depuis la racine du dépôt :
`py2puml opendevin opendevin > docs/architecture/backend_architecture.puml`
2. Ouvrez le fichier généré dans un éditeur PlantUML, par exemple Visual Studio Code avec l'extension PlantUML ou [PlantText](https://www.planttext.com/)
3. Révisez le PUML généré et apportez toutes les modifications nécessaires au schéma (ajoutez les parties manquantes, corrigez les erreurs, améliorez l'agencement).
_py2puml crée le schéma à partir des annotations de type dans le code, donc les annotations de type manquantes ou incorrectes peuvent entraîner un schéma incomplet ou incorrect._
4. Examinez la différence entre le nouveau schéma et le précédent et vérifiez manuellement si les modifications sont correctes.
_Assurez-vous de ne pas supprimer les parties ajoutées manuellement au schéma par le passé et qui sont toujours pertinentes._
5. Ajoutez le hash du commit qui a été utilisé pour générer le schéma dans le pied de page du schéma.
6. Exporte le schéma sous forme de fichiers PNG et SVG et remplacez les schémas existants dans le répertoire `docs/architecture`. Cela peut être fait avec (par exemple [PlantText](https://www.planttext.com/))
</div>
</details>

View File

@ -0,0 +1,18 @@
---
sidebar_position: 6
---
# ✅ Fournir des Commentaires
Lorsque vous utilisez OpenDevin, vous rencontrerez sans aucun doute des cas où les choses fonctionnent bien et d'autres où elles ne fonctionnent pas. Nous vous encourageons à fournir des commentaires lorsque vous utilisez OpenDevin pour aider l'équipe de développement et, peut-être plus important encore, créer un corpus ouvert d'exemples de formation pour les agents de codage -- Partagez-OpenDevin !
## 📝 Comment Fournir des Commentaires
Fournir des commentaires est simple ! Lorsque vous utilisez OpenDevin, vous pouvez appuyer sur le bouton de pouce vers le haut ou vers le bas à n'importe quel moment de votre interaction. Vous serez invité à fournir votre adresse email (par exemple, afin que nous puissions vous contacter si nous voulons poser des questions de suivi), et vous pouvez choisir si vous souhaitez fournir des commentaires publiquement ou en privé.
<iframe width="560" height="315" src="https://www.youtube.com/embed/5rFx-StMVV0?si=svo7xzp6LhGK_GXr" title="Lecteur vidéo YouTube" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## 📜 Licence de Données et Confidentialité
* Les données **publiques** seront distribuées sous la licence MIT, comme OpenDevin lui-même, et pourront être utilisées par la communauté pour former et tester des modèles. Évidemment, les commentaires que vous pouvez rendre publics seront plus précieux pour la communauté dans son ensemble, donc lorsque vous ne traitez pas d'informations sensibles, nous vous encourageons à choisir cette option !
* Les données **privées** ne seront partagées qu'avec l'équipe OpenDevin dans le but d'améliorer OpenDevin.

View File

@ -0,0 +1,111 @@
---
sidebar_position: 1
---
# 💻 OpenDevin
OpenDevin est un **ingénieur logiciel IA autonome** capable d'exécuter des tâches d'ingénierie complexes et de collaborer activement avec les utilisateurs sur des projets de développement logiciel.
Ce projet est entièrement open-source, vous pouvez donc l'utiliser et le modifier comme bon vous semble.
:::tip
Explorez le code source d'OpenDevin sur [GitHub](https://github.com/OpenDevin/OpenDevin) ou rejoignez l'une de nos communautés !
<a href="https://github.com/OpenDevin/OpenDevin/graphs/contributors">
<img
src="https://img.shields.io/github/contributors/opendevin/opendevin?style=for-the-badge"
alt="Contributors"
/>
</a>
<a href="https://github.com/OpenDevin/OpenDevin/network/members">
<img
src="https://img.shields.io/github/forks/opendevin/opendevin?style=for-the-badge"
alt="Forks"
/>
</a>
<a href="https://github.com/OpenDevin/OpenDevin/stargazers">
<img
src="https://img.shields.io/github/stars/opendevin/opendevin?style=for-the-badge"
alt="Stargazers"
/>
</a>
<a href="https://github.com/OpenDevin/OpenDevin/issues">
<img
src="https://img.shields.io/github/issues/opendevin/opendevin?style=for-the-badge"
alt="Issues"
/>
</a>
<br></br>
<a href="https://github.com/OpenDevin/OpenDevin/blob/main/LICENSE">
<img
src="https://img.shields.io/github/license/opendevin/opendevin?style=for-the-badge"
alt="MIT License"
/>
</a>
<br></br>
<a href="https://join.slack.com/t/opendevin/shared_invite/zt-2jsrl32uf-fTeeFjNyNYxqSZt5NPY3fA">
<img
src="https://img.shields.io/badge/Slack-Join%20Us-red?logo=slack&logoColor=white&style=for-the-badge"
alt="Join our Slack community"
/>
</a>
<a href="https://discord.gg/ESHStjSjD4">
<img
src="https://img.shields.io/badge/Discord-Join%20Us-purple?logo=discord&logoColor=white&style=for-the-badge"
alt="Join our Discord community"
/>
</a>
:::
## 🛠️ Pour commencer
La manière la plus simple d'exécuter OpenDevin est à l'intérieur d'un conteneur Docker. Il fonctionne mieux avec la version la plus récente de Docker, `26.0.0`.
Vous devez utiliser Linux, Mac OS ou WSL sur Windows.
Pour démarrer OpenDevin dans un conteneur docker, exécutez les commandes suivantes dans votre terminal :
:::warning
Lorsque vous exécutez la commande suivante, les fichiers dans `./workspace` peuvent être modifiés ou supprimés.
:::
```bash
WORKSPACE_BASE=$(pwd)/workspace
docker run -it \
--pull=always \
-e SANDBOX_USER_ID=$(id -u) \
-e PERSIST_SANDBOX="true" \
-e SSH_PASSWORD="make something up here" \
-e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \
-v $WORKSPACE_BASE:/opt/workspace_base \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name opendevin-app-$(date +%Y%m%d%H%M%S) \
ghcr.io/opendevin/opendevin:0.6
```
Vous trouverez OpenDevin fonctionnant à l'adresse [http://localhost:3000](http://localhost:3000) avec accès à `./workspace`. Pour qu'OpenDevin fonctionne sur votre code, placez-le dans `./workspace`.
OpenDevin n'aura accès qu'à ce dossier de workspace. Le reste de votre système ne sera pas affecté car il s'exécute dans un bac à sable sécurisé de docker.
:::tip
Si vous souhaitez utiliser la version **(instable !)** la plus récente, vous pouvez utiliser `ghcr.io/opendevin/opendevin:main` comme image (dernière ligne).
:::
Pour le workflow de développement, consultez [Development.md](https://github.com/OpenDevin/OpenDevin/blob/main/Development.md).
Avez-vous des problèmes ? Consultez notre [Guide de dépannage](https://opendevin.github.io/OpenDevin/modules/usage/troubleshooting).
:::warning
OpenDevin est actuellement en cours de développement, mais vous pouvez déjà exécuter la version alpha pour voir le système de bout en bout en action.
:::
[contributors-shield]: https://img.shields.io/github/contributors/opendevin/opendevin?style=for-the-badge
[contributors-url]: https://github.com/OpenDevin/OpenDevin/graphs/contributors
[forks-shield]: https://img.shields.io/github/forks/opendevin/opendevin?style=for-the-badge
[forks-url]: https://github.com/OpenDevin/OpenDevin/network/members
[stars-shield]: https://img.shields.io/github/stars/opendevin/opendevin?style=for-the-badge
[stars-url]: https://github.com/OpenDevin/OpenDevin/stargazers
[issues-shield]: https://img.shields.io/github/issues/opendevin/opendevin?style=for-the-badge
[issues-url]: https://github.com/OpenDevin/OpenDevin/issues
[license-shield]: https://img.shields.io/github/license/opendevin/opendevin?style=for-the-badge
[license-url]: https://github.com/OpenDevin/OpenDevin/blob/main/LICENSE

View File

@ -0,0 +1,37 @@
# Azure OpenAI LLM
## Complétion
OpenDevin utilise LiteLLM pour les appels de complétion. Vous pouvez trouver leur documentation sur Azure [ici](https://docs.litellm.ai/docs/providers/azure)
### Configurations openai Azure
Lors de l'exécution de l'image Docker OpenDevin, vous devrez définir les variables d'environnement suivantes en utilisant `-e` :
```
LLM_BASE_URL="<azure-api-base-url>" # e.g. "https://openai-gpt-4-test-v-1.openai.azure.com/"
LLM_API_KEY="<azure-api-key>"
LLM_MODEL="azure/<your-gpt-deployment-name>"
LLM_API_VERSION = "<api-version>" # e.g. "2024-02-15-preview"
```
:::note
Vous pouvez trouver le nom de votre déploiement ChatGPT sur la page des déploiements sur Azure. Par défaut ou initialement, il pourrait être le même que le nom du modèle de chat (par exemple 'GPT4-1106-preview'), mais il n'est pas obligé de l'être. Exécutez OpenDevin, et une fois chargé dans le navigateur, allez dans Paramètres et définissez le modèle comme suit : "azure/&lt;your-actual-gpt-deployment-name&gt;". Si ce n'est pas dans la liste, entrez votre propre texte et enregistrez-le.
:::
## Embeddings
OpenDevin utilise llama-index pour les embeddings. Vous pouvez trouver leur documentation sur Azure [ici](https://docs.llamaindex.ai/en/stable/api_reference/embeddings/azure_openai/)
### Configurations openai Azure
Le modèle utilisé pour les embeddings Azure OpenAI est "text-embedding-ada-002".
Vous avez besoin du nom de déploiement correct pour ce modèle dans votre compte Azure.
Lors de l'exécution d'OpenDevin dans Docker, définissez les variables d'environnement suivantes en utilisant `-e` :
```
LLM_EMBEDDING_MODEL="azureopenai"
LLM_EMBEDDING_DEPLOYMENT_NAME = "<your-embedding-deployment-name>" # e.g. "TextEmbedding...<etc>"
LLM_API_VERSION = "<api-version>" # e.g. "2024-02-15-preview"
```

View File

@ -0,0 +1,28 @@
# Google Gemini/Vertex LLM
## Complétion
OpenDevin utilise LiteLLM pour les appels de complétion. Les ressources suivantes sont pertinentes pour utiliser OpenDevin avec les LLMs de Google :
- [Gemini - Google AI Studio](https://docs.litellm.ai/docs/providers/gemini)
- [VertexAI - Google Cloud Platform](https://docs.litellm.ai/docs/providers/vertex)
### Configurations de Gemini - Google AI Studio
Pour utiliser Gemini via Google AI Studio lors de l'exécution de l'image Docker d'OpenDevin, vous devez définir les variables d'environnement suivantes en utilisant `-e` :
```
GEMINI_API_KEY="<votre-cle-api-google>"
LLM_MODEL="gemini/gemini-1.5-pro"
```
### Configurations de Vertex AI - Google Cloud Platform
Pour utiliser Vertex AI via Google Cloud Platform lors de l'exécution de l'image Docker d'OpenDevin, vous devez définir les variables d'environnement suivantes en utilisant `-e` :
```
GOOGLE_APPLICATION_CREDENTIALS="<dump-json-du-compte-de-service-gcp-json>"
VERTEXAI_PROJECT="<votre-id-de-projet-gcp>"
VERTEXAI_LOCATION="<votre-localisation-gcp>"
LLM_MODEL="vertex_ai/<modele-llm-desire>"
```

View File

@ -0,0 +1,44 @@
---
sidebar_position: 2
---
# 🤖 Backends LLM
OpenDevin peut fonctionner avec n'importe quel backend LLM.
Pour une liste complète des fournisseurs et des modèles LM disponibles, veuillez consulter la
[documentation litellm](https://docs.litellm.ai/docs/providers).
:::warning
OpenDevin émettra de nombreuses invitations au LLM que vous configurez. La plupart de ces LLM coûtent de l'argent -- assurez-vous de définir des limites de dépenses et de surveiller l'utilisation.
:::
La variable d'environnement `LLM_MODEL` contrôle le modèle utilisé dans les interactions programmatiques.
Mais en utilisant l'interface utilisateur OpenDevin, vous devrez choisir votre modèle dans la fenêtre des paramètres (la roue dentée en bas à gauche).
Les variables d'environnement suivantes peuvent être nécessaires pour certains LLM :
- `LLM_API_KEY`
- `LLM_BASE_URL`
- `LLM_EMBEDDING_MODEL`
- `LLM_EMBEDDING_DEPLOYMENT_NAME`
- `LLM_API_VERSION`
Nous avons quelques guides pour exécuter OpenDevin avec des fournisseurs de modèles spécifiques :
- [ollama](llms/localLLMs)
- [Azure](llms/azureLLMs)
Si vous utilisez un autre fournisseur, nous vous encourageons à ouvrir une PR pour partager votre configuration !
## Remarque sur les modèles alternatifs
Les meilleurs modèles sont GPT-4 et Claude 3. Les modèles locaux et open source actuels ne sont pas aussi puissants.
Lors de l'utilisation d'un modèle alternatif, vous pouvez constater des temps d'attente prolongés entre les messages,
des réponses de mauvaise qualité ou des erreurs sur des JSON mal formés. OpenDevin
ne peut être aussi puissant que les modèles qui le pilotent -- heureusement, les membres de notre équipe travaillent activement à la construction de meilleurs modèles open source !
## Réessais d'API et limites de taux
Certains LLM ont des limites de taux et peuvent nécessiter des réessais. OpenDevin réessaiera automatiquement les demandes s'il reçoit une erreur 429 ou une erreur de connexion API.
Vous pouvez définir les variables d'environnement `LLM_NUM_RETRIES`, `LLM_RETRY_MIN_WAIT`, `LLM_RETRY_MAX_WAIT` pour contrôler le nombre de réessais et le temps entre les réessais.
Par défaut, `LLM_NUM_RETRIES` est 5 et `LLM_RETRY_MIN_WAIT`, `LLM_RETRY_MAX_WAIT` sont respectivement de 3 secondes et 60 secondes.

View File

@ -0,0 +1,141 @@
# LLM Local avec Ollama
Assurez-vous que le serveur Ollama est en cours d'exécution.
Pour des instructions détaillées de démarrage, consultez [ici](https://github.com/ollama/ollama)
Ce guide suppose que vous avez démarré ollama avec `ollama serve`. Si vous exécutez ollama différemment (par exemple, à l'intérieur de docker), les instructions pourraient devoir être modifiées. Veuillez noter que si vous utilisez WSL, la configuration par défaut de ollama bloque les requêtes des conteneurs docker. Voir [ici](#configuring-ollama-service-fr).
## Télécharger des modèles
Les noms des modèles Ollama peuvent être trouvés [ici](https://ollama.com/library). Pour un petit exemple, vous pouvez utiliser
le modèle `codellama:7b`. Des modèles plus grands offriront généralement de meilleures performances.
```bash
ollama pull codellama:7b
```
vous pouvez vérifier quels modèles vous avez téléchargés de cette manière :
```bash
~$ ollama list
NAME ID SIZE MODIFIED
codellama:7b 8fdf8f752f6e 3.8 GB 6 weeks ago
mistral:7b-instruct-v0.2-q4_K_M eb14864c7427 4.4 GB 2 weeks ago
starcoder2:latest f67ae0f64584 1.7 GB 19 hours ago
```
## Démarrer OpenDevin
### Docker
Utilisez les instructions [ici](../intro) pour démarrer OpenDevin en utilisant Docker.
Mais lors de l'exécution de `docker run`, vous devrez ajouter quelques arguments supplémentaires :
```bash
--add-host host.docker.internal:host-gateway \
-e LLM_API_KEY="ollama" \
-e LLM_BASE_URL="http://host.docker.internal:11434" \
```
Par exemple :
```bash
# Le répertoire que vous souhaitez qu'OpenDevin modifie. DOIT être un chemin absolu !
export WORKSPACE_BASE=$(pwd)/workspace
docker run \
-it \
--pull=always \
--add-host host.docker.internal:host-gateway \
-e SANDBOX_USER_ID=$(id -u) \
-e LLM_API_KEY="ollama" \
-e LLM_BASE_URL="http://host.docker.internal:11434" \
-e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \
-v $WORKSPACE_BASE:/opt/workspace_base \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 3000:3000 \
ghcr.io/opendevin/opendevin:main
```
Vous devriez maintenant pouvoir vous connecter à `http://localhost:3000/`
### Compiler à partir des sources
Utilisez les instructions dans [Development.md](https://github.com/OpenDevin/OpenDevin/blob/main/Development.md) pour compiler OpenDevin.
Assurez-vous que `config.toml` soit présent en exécutant `make setup-config` qui en créera un pour vous. Dans `config.toml`, saisissez les éléments suivants :
```
LLM_MODEL="ollama/codellama:7b"
LLM_API_KEY="ollama"
LLM_EMBEDDING_MODEL="local"
LLM_BASE_URL="http://localhost:11434"
WORKSPACE_BASE="./workspace"
WORKSPACE_DIR="$(pwd)/workspace"
```
Remplacez `LLM_MODEL` par celui de votre choix si nécessaire.
Fini ! Vous pouvez maintenant démarrer Devin avec : `make run` sans Docker. Vous devriez maintenant pouvoir vous connecter à `http://localhost:3000/`
## Sélection de votre modèle
Dans l'interface OpenDevin, cliquez sur l'icône des paramètres en bas à gauche.
Ensuite, dans l'entrée `Model`, saisissez `ollama/codellama:7b`, ou le nom du modèle que vous avez téléchargé précédemment.
S'il n'apparaît pas dans un menu déroulant, ce n'est pas grave, tapez-le simplement. Cliquez sur Enregistrer lorsque vous avez terminé.
Et maintenant, vous êtes prêt à démarrer !
## Configuration du service ollama (WSL){#configuring-ollama-service-fr}
La configuration par défaut pour ollama sous WSL ne sert que localhost. Cela signifie que vous ne pouvez pas l'atteindre depuis un conteneur docker, par exemple, il ne fonctionnera pas avec OpenDevin. Testons d'abord que ollama est en cours d'exécution correctement.
```bash
ollama list # obtenir la liste des modèles installés
curl http://localhost:11434/api/generate -d '{"model":"[NAME]","prompt":"hi"}'
#ex. curl http://localhost:11434/api/generate -d '{"model":"codellama:7b","prompt":"hi"}'
#ex. curl http://localhost:11434/api/generate -d '{"model":"codellama","prompt":"hi"}' #le tag est optionnel s'il n'y en a qu'un seul
```
Une fois cela fait, testez qu'il accepte les requêtes "externes", comme celles provenant d'un conteneur docker.
```bash
docker ps # obtenir la liste des conteneurs docker en cours d'exécution, pour un test le plus précis choisissez le conteneur de sandbox open devin.
docker exec [CONTAINER ID] curl http://host.docker.internal:11434/api/generate -d '{"model":"[NAME]","prompt":"hi"}'
#ex. docker exec cd9cc82f7a11 curl http://host.docker.internal:11434/api/generate -d '{"model":"codellama","prompt":"hi"}'
```
## Correction
Maintenant faisons en sorte que cela fonctionne. Modifiez /etc/systemd/system/ollama.service avec les privilèges sudo. (Le chemin peut varier selon la distribution Linux)
```bash
sudo vi /etc/systemd/system/ollama.service
```
ou
```bash
sudo nano /etc/systemd/system/ollama.service
```
Dans la section [Service], ajoutez ces lignes
```
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"
```
Ensuite, sauvegardez, rechargez la configuration et redémarrez le service.
```bash
sudo systemctl daemon-reload
sudo systemctl restart ollama
```
Enfin, testez que ollama est accessible depuis le conteneur
```bash
ollama list # obtenir la liste des modèles installés
docker ps # obtenir la liste des conteneurs docker en cours d'exécution, pour un test le plus précis choisissez le conteneur de sandbox open devin.
docker exec [CONTAINER ID] curl http://host.docker.internal:11434/api/generate -d '{"model":"[NAME]","prompt":"hi"}'
```

View File

@ -0,0 +1,208 @@
---
sidebar_position: 5
---
# 🚧 Dépannage
Il existe certains messages d'erreur qui sont souvent signalés par les utilisateurs.
Nous essaierons de rendre le processus d'installation plus facile et ces messages d'erreur
mieux à l'avenir. Mais pour l'instant, vous pouvez rechercher votre message d'erreur ci-dessous et voir s'il existe des solutions de contournement.
Pour chacun de ces messages d'erreur, **il existe un problème existant**. Veuillez ne pas
ouvrir un nouveau problème - commentez simplement dessus.
Si vous trouvez plus d'informations ou une solution de contournement pour l'un de ces problèmes, veuillez ouvrir un *PR* pour ajouter des détails à ce fichier.
:::tip
Si vous utilisez Windows et que vous rencontrez des problèmes, consultez notre [guide pour les utilisateurs de Windows (WSL)](troubleshooting/windows).
:::
## Impossible de se connecter à Docker
[Problème GitHub](https://github.com/OpenDevin/OpenDevin/issues/1226)
### Symptômes
```bash
Erreur lors de la création du contrôleur. Veuillez vérifier que Docker est en cours d'exécution et visitez `https://opendevin.github.io/OpenDevin/modules/usage/troubleshooting` pour plus d'informations sur le débogage.
```
```bash
docker.errors.DockerException: Erreur lors de la récupération de la version de l'API du serveur : ('Connection aborted.', FileNotFoundError(2, 'Aucun fichier ou répertoire de ce type'))
```
### Détails
OpenDevin utilise un conteneur Docker pour effectuer son travail en toute sécurité, sans risquer de briser votre machine.
### Solutions de contournement
* Exécutez `docker ps` pour vous assurer que docker est en cours d'exécution
* Assurez-vous que vous n'avez pas besoin de `sudo` pour exécuter docker [voir ici](https://www.baeldung.com/linux/docker-run-without-sudo)
* Si vous êtes sur un Mac, vérifiez les [exigences en matière d'autorisations](https://docs.docker.com/desktop/mac/permission-requirements/) et envisagez particulièrement d'activer l'option `Allow the default Docker socket to be used` sous `Settings > Advanced` dans Docker Desktop.
* De plus, mettez à jour Docker vers la dernière version sous `Check for Updates`
## Impossible de se connecter à la boîte SSH
[Problème GitHub](https://github.com/OpenDevin/OpenDevin/issues/1156)
### Symptômes
```python
self.shell = DockerSSHBox(
...
pexpect.pxssh.ExceptionPxssh: Impossible d'établir une connexion avec l'hôte
```
### Détails
Par défaut, OpenDevin se connecte à un conteneur en cours d'exécution via SSH. Sur certaines machines,
en particulier Windows, cela semble échouer.
### Solutions de contournement
* Redémarrez votre ordinateur (parfois cela fonctionne)
* Assurez-vous d'avoir les dernières versions de WSL et Docker
* Vérifiez que votre distribution dans WSL est également à jour
* Essayez [ce guide de réinstallation](https://github.com/OpenDevin/OpenDevin/issues/1156#issuecomment-2064549427)
* Définissez `-e SANDBOX_TYPE=exec` pour passer au conteneur ExecBox de Docker
## Impossible de se connecter à LLM
[Problème GitHub](https://github.com/OpenDevin/OpenDevin/issues/1208)
### Symptômes
```python
File "/app/.venv/lib/python3.12/site-packages/openai/_exceptions.py", line 81, in __init__
super().__init__(message, response.request, body=body)
^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'request'
```
### Détails
[Problèmes GitHub](https://github.com/OpenDevin/OpenDevin/issues?q=is%3Aissue+is%3Aopen+404)
Cela se produit généralement avec les configurations de LLM *locales*, lorsque OpenDevin ne parvient pas à se connecter au serveur LLM.
Consultez notre guide pour [LLMs locaux](llms/localLLMs) pour plus d'informations.
### Solutions de contournement
* Vérifiez votre `base_url` dans votre config.toml (si elle existe) sous la section "llm"
* Vérifiez que ollama (ou tout autre LLM que vous utilisez) fonctionne correctement
* Assurez-vous d'utiliser `--add-host host.docker.internal:host-gateway` lorsque vous utilisez Docker
## `404 Ressource non trouvée`
### Symptômes
```python
Traceback (most recent call last):
File "/app/.venv/lib/python3.12/site-packages/litellm/llms/openai.py", line 414, in completion
raise e
File "/app/.venv/lib/python3.12/site-packages/litellm/llms/openai.py", line 373, in completion
response = openai_client.chat.completions.create(**data, timeout=timeout) # type: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/openai/_utils/_utils.py", line 277, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/openai/resources/chat/completions.py", line 579, in create
return self._post(
^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1232, in post
return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 921, in request
return self._request(
^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1012, in _request
raise self._make_status_error_from_response(err.response) from None
openai.NotFoundError: Code d'erreur : 404 - {'error': {'code': '404', 'message': 'Ressource non trouvée'}}
```
### Détails
Cela se produit lorsque LiteLLM (notre bibliothèque pour se connecter à différents fournisseurs de LLM) ne parvient pas à trouver
le point de terminaison API avec lequel vous essayez de vous connecter. Cela arrive le plus souvent aux utilisateurs de Azure ou ollama.
### Solutions de contournement
* Vérifiez que vous avez correctement défini `LLM_BASE_URL`
* Vérifiez que le modèle est correctement défini, en fonction des [docs de LiteLLM](https://docs.litellm.ai/docs/providers)
* Si vous êtes en cours d'exécution dans l'interface utilisateur, assurez-vous de définir le `model` dans le modal des paramètres
* Si vous êtes en cours d'exécution sans interface (via main.py), assurez-vous de définir `LLM_MODEL` dans votre env/config
* Assurez-vous de suivre les instructions spéciales de votre fournisseur de LLM
* [ollama](/OpenDevin/fr/modules/usage/llms/localLLMs)
* [Azure](/OpenDevin/fr/modules/usage/llms/azureLLMs)
* [Google](/OpenDevin/fr/modules/usage/llms/googleLLMs)
* Assurez-vous que votre clé API est correcte
* Voyez si vous pouvez vous connecter au LLM en utilisant `curl`
* Essayez de [vous connecter via LiteLLM directement](https://github.com/BerriAI/litellm) pour tester votre configuration
## `make build` bloqué sur les installations de packages
### Symptômes
Installation de package bloquée sur `En attente...` sans aucun message d'erreur :
```bash
Opérations de package : 286 installations, 0 mises à jour, 0 suppressions
- Installation de certifi (2024.2.2) : En attente...
- Installation de h11 (0.14.0) : En attente...
- Installation de idna (3.7) : En attente...
- Installation de sniffio (1.3.1) : En attente...
- Installation de typing-extensions (4.11.0) : En attente...
```
### Détails
Dans de rares cas, `make build` peut sembler bloqué sur les installations de packages
sans aucun message d'erreur.
### Solutions de contournement
* Le gestionnaire de packages Poetry peut manquer d'un paramètre de configuration concernant
l'emplacement où doivent être recherchées les informations d'identification (keyring).
### Solution de contournement
Tout d'abord, vérifiez avec `env` si une valeur pour `PYTHON_KEYRING_BACKEND` existe.
Sinon, exécutez la commande ci-dessous pour la définir à une valeur connue et réessayez la construction :
```bash
export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
```
## Les sessions ne sont pas restaurées
### Symptômes
OpenDevin demande généralement s'il faut reprendre ou commencer une nouvelle session lors de l'ouverture de l'interface utilisateur.
Mais cliquer sur "Reprendre" démarre toujours une toute nouvelle discussion.
### Détails
Avec une installation standard à ce jour, les données de session sont stockées en mémoire.
Actuellement, si le service OpenDevin est redémarré, les sessions précédentes deviennent
invalides (un nouveau secret est généré) et donc non récupérables.
### Solutions de contournement
* Modifiez la configuration pour rendre les sessions persistantes en éditant le fichier `config.toml`
(dans le dossier racine d'OpenDevin) en spécifiant un `file_store` et un
`file_store_path` absolu :
```toml
file_store="local"
file_store_path="/absolute/path/to/opendevin/cache/directory"
```
* Ajoutez un secret jwt fixe dans votre .bashrc, comme ci-dessous, afin que les id de session précédents
restent acceptés.
```bash
EXPORT JWT_SECRET=A_CONST_VALUE
```

View File

@ -0,0 +1,76 @@
# Notes pour les utilisateurs de Windows et WSL
OpenDevin ne supporte Windows que via [WSL](https://learn.microsoft.com/en-us/windows/wsl/install).
Veuillez vous assurer de lancer toutes les commandes à l'intérieur de votre terminal WSL.
## Dépannage
### Erreur : 'docker' n'a pas pu être trouvé dans cette distribution WSL 2.
Si vous utilisez Docker Desktop, assurez-vous de le démarrer avant d'exécuter toute commande docker depuis l'intérieur de WSL.
Docker doit également avoir l'option d'intégration WSL activée.
### Recommandation : Ne pas exécuter en tant qu'utilisateur root
Pour des raisons de sécurité, il est fortement recommandé de ne pas exécuter OpenDevin en tant qu'utilisateur root, mais en tant qu'utilisateur avec un UID non nul.
De plus, les sandboxes persistants ne seront pas pris en charge lors de l'exécution en tant que root et un message approprié pourrait apparaître lors du démarrage d'OpenDevin.
Références :
* [Pourquoi il est mauvais de se connecter en tant que root](https://askubuntu.com/questions/16178/why-is-it-bad-to-log-in-as-root)
* [Définir l'utilisateur par défaut dans WSL](https://www.tenforums.com/tutorials/128152-set-default-user-windows-subsystem-linux-distro-windows-10-a.html#option2)
Astuce pour la 2e référence : pour les utilisateurs d'Ubuntu, la commande pourrait en fait être "ubuntupreview" au lieu de "ubuntu".
### Échec de la création de l'utilisateur opendevin
Si vous rencontrez l'erreur suivante lors de l'installation :
```sh
Exception: Failed to create opendevin user in sandbox: 'useradd: UID 0 is not unique'
```
Vous pouvez la résoudre en exécutant :
```sh
export SANDBOX_USER_ID=1000
```
### Installation de Poetry
* Si vous rencontrez des problèmes pour exécuter Poetry même après l'avoir installé pendant le processus de construction, il peut être nécessaire d'ajouter son chemin binaire à votre environnement :
```sh
export PATH="$HOME/.local/bin:$PATH"
```
* Si `make build` s'arrête avec une erreur telle que :
```sh
ModuleNotFoundError: no module named <module-name>
```
Cela pourrait être un problème avec le cache de Poetry.
Essayez d'exécuter ces 2 commandes l'une après l'autre :
```sh
rm -r ~/.cache/pypoetry
make build
```
### L'objet NoneType n'a pas d'attribut 'request'
Si vous rencontrez des problèmes liés au réseau, tels que `NoneType object has no attribute 'request'` lors de l'exécution de `make run`, il peut être nécessaire de configurer vos paramètres réseau WSL2. Suivez ces étapes :
* Ouvrez ou créez le fichier `.wslconfig` situé à `C:\Users\%username%\.wslconfig` sur votre machine hôte Windows.
* Ajoutez la configuration suivante au fichier `.wslconfig` :
```sh
[wsl2]
networkingMode=mirrored
localhostForwarding=true
```
* Enregistrez le fichier `.wslconfig`.
* Redémarrez WSL2 complètement en quittant toute instance WSL2 en cours d'exécution et en exécutant la commande `wsl --shutdown` dans votre invite de commande ou terminal.
* Après avoir redémarré WSL, essayez d'exécuter `make run` à nouveau.
Le problème réseau devrait être résolu.

View File

@ -0,0 +1,26 @@
{
"title": {
"message": "OpenDevin",
"description": "The title in the navbar"
},
"logo.alt": {
"message": "OpenDevin",
"description": "The alt text of navbar logo"
},
"item.label.Docs": {
"message": "Docs",
"description": "Navbar item with label Docs"
},
"item.label.Codebase": {
"message": "Codebase",
"description": "Navbar item with label Codebase"
},
"item.label.FAQ": {
"message": "FAQ",
"description": "Navbar item with label FAQ"
},
"item.label.GitHub": {
"message": "GitHub",
"description": "Navbar item with label GitHub"
}
}

406
docs/i18n/zh-Hans/code.json Normal file
View File

@ -0,0 +1,406 @@
{
"footer.title": {
"message": "OpenDevin"
},
"footer.docs": {
"message": "Docs"
},
"footer.community": {
"message": "Community"
},
"footer.copyright": {
"message": "Copyright © {year} OpenDevin"
},
"faq.title": {
"message": "Frequently Asked Questions",
"description": "FAQ Title"
},
"faq.description": {
"message": "Frequently Asked Questions"
},
"faq.section.title.1": {
"message": "What is OpenDevin?",
"description": "First Section Title"
},
"faq.section.highlight": {
"message": "OpenDevin",
"description": "Highlight Text"
},
"faq.section.description.1": {
"message": "is an autonomous software engineer that can solve software engineering and web-browsing tasks end-to-end. It can perform data science queries, such as \"Find the number of pull requests to the OpenDevin repository in the last month,\" and software engineering tasks, such as \"Please add tests to this file and verify that all the tests pass. If they don't fix the file.\"",
"description": "Description for OpenDevin"
},
"faq.section.description.2": {
"message": "At the same time, OpenDevin is a platform and community for agent developers to test out and evaluate new agents.",
"description": "Further Description for OpenDevin"
},
"faq.section.title.2": {
"message": "Support",
"description": "Support Section Title"
},
"faq.section.support.answer": {
"message": "Please file a bug on {githubLink} if you notice a problem that likely affects others. If you're having trouble installing, or have general questions, reach out on {discordLink} or {slackLink}.",
"description": "Support Answer"
},
"faq.section.title.3": {
"message": "How to fix a GitHub issue with OpenDevin?",
"description": "GitHub Issue Section Title"
},
"faq.section.github.steps.intro": {
"message": "To fix an issue on GitHub using OpenDevin, send a prompt to OpenDevin asking it to follow steps like the following:",
"description": "GitHub Steps Introduction"
},
"faq.section.github.step1": {
"message": "Read the issue https://github.com/OpenDevin/OpenDevin/issues/1611",
"description": "GitHub Step 1"
},
"faq.section.github.step2": {
"message": "Clone the repository and check out a new branch",
"description": "GitHub Step 2"
},
"faq.section.github.step3": {
"message": "Based on the instructions in the issue description, modify files to fix the issue",
"description": "GitHub Step 3"
},
"faq.section.github.step4": {
"message": "Push the resulting output to GitHub using the GITHUB_TOKEN environment variable",
"description": "GitHub Step 4"
},
"faq.section.github.step5": {
"message": "Tell me the link that I need to go to to send a pull request",
"description": "GitHub Step 5"
},
"faq.section.github.steps.preRun": {
"message": "Before you run OpenDevin, you can do:",
"description": "GitHub Steps Pre-Run"
},
"faq.section.github.steps.tokenInfo": {
"message": "where XXX is a GitHub token that you created that has permissions to push to the OpenDevin repo. If you dont have write permission to the OpenDevin repo, you might need to change that to:",
"description": "GitHub Steps Token Info"
},
"faq.section.github.steps.usernameInfo": {
"message": "where USERNAME is your GitHub username.",
"description": "GitHub Steps Username Info"
},
"faq.section.title.4": {
"message": "How is OpenDevin different from Devin?",
"description": "Devin Section Title"
},
"faq.section.devin.linkText": {
"message": "Devin",
"description": "Devin Link Text"
},
"faq.section.devin.description": {
"message": "is a commercial product by Cognition Inc., that served as the initial inspiration for OpenDevin. They both aim to do a good job at solving software engineering tasks, but OpenDevin you can download, use, and modify, while Devin you can only use through the Cognition site. In addition, OpenDevin has evolved beyond the initial inspiration, and now serves as a community-driven ecosystem for agent development in general, and we'd love to have you join and",
"description": "Devin Description"
},
"faq.section.devin.contribute": {
"message": "contribute",
"description": "Contribute Link"
},
"faq.section.title.5": {
"message": "How is OpenDevin different from ChatGPT?",
"description": "ChatGPT Section Title"
},
"faq.section.chatgpt.description": {
"message": "ChatGPT you can access online, it does not interface with local files, and its ability to execute code is limited. So it can write code, but it is not easy to test or execute it.",
"description": "ChatGPT Description"
},
"homepage.description": {
"message": "AI-powered code generation for software engineering.",
"description": "The homepage description"
},
"homepage.getStarted": {
"message": "Get Started"
},
"welcome.message": {
"message": "Welcome to OpenDevin, an open-source autonomous AI software engineer that is capable of executing complex engineering tasks and collaborating actively with users on software development projects."
},
"theme.ErrorPageContent.title": {
"message": "页面已崩溃。",
"description": "The title of the fallback page when the page crashed"
},
"theme.BackToTopButton.buttonAriaLabel": {
"message": "回到顶部",
"description": "The ARIA label for the back to top button"
},
"theme.blog.archive.title": {
"message": "历史博文",
"description": "The page & hero title of the blog archive page"
},
"theme.blog.archive.description": {
"message": "历史博文",
"description": "The page & hero description of the blog archive page"
},
"theme.blog.paginator.navAriaLabel": {
"message": "博文列表分页导航",
"description": "The ARIA label for the blog pagination"
},
"theme.blog.paginator.newerEntries": {
"message": "较新的博文",
"description": "The label used to navigate to the newer blog posts page (previous page)"
},
"theme.blog.paginator.olderEntries": {
"message": "较旧的博文",
"description": "The label used to navigate to the older blog posts page (next page)"
},
"theme.blog.post.paginator.navAriaLabel": {
"message": "博文分页导航",
"description": "The ARIA label for the blog posts pagination"
},
"theme.blog.post.paginator.newerPost": {
"message": "较新一篇",
"description": "The blog post button label to navigate to the newer/previous post"
},
"theme.blog.post.paginator.olderPost": {
"message": "较旧一篇",
"description": "The blog post button label to navigate to the older/next post"
},
"theme.blog.post.plurals": {
"message": "{count} 篇博文",
"description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.blog.tagTitle": {
"message": "{nPosts} 含有标签「{tagName}」",
"description": "The title of the page for a blog tag"
},
"theme.tags.tagsPageLink": {
"message": "查看所有标签",
"description": "The label of the link targeting the tag list page"
},
"theme.colorToggle.ariaLabel": {
"message": "切换浅色/暗黑模式(当前为{mode}",
"description": "The ARIA label for the navbar color mode toggle"
},
"theme.colorToggle.ariaLabel.mode.dark": {
"message": "暗黑模式",
"description": "The name for the dark color mode"
},
"theme.colorToggle.ariaLabel.mode.light": {
"message": "浅色模式",
"description": "The name for the light color mode"
},
"theme.docs.breadcrumbs.navAriaLabel": {
"message": "页面路径",
"description": "The ARIA label for the breadcrumbs"
},
"theme.docs.DocCard.categoryDescription.plurals": {
"message": "{count} 个项目",
"description": "The default description for a category card in the generated index about how many items this category includes"
},
"theme.docs.paginator.navAriaLabel": {
"message": "文件选项卡",
"description": "The ARIA label for the docs pagination"
},
"theme.docs.paginator.previous": {
"message": "上一页",
"description": "The label used to navigate to the previous doc"
},
"theme.docs.paginator.next": {
"message": "下一页",
"description": "The label used to navigate to the next doc"
},
"theme.docs.tagDocListPageTitle.nDocsTagged": {
"message": "{count} 篇文档带有标签",
"description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.docs.tagDocListPageTitle": {
"message": "{nDocsTagged}「{tagName}」",
"description": "The title of the page for a docs tag"
},
"theme.docs.versionBadge.label": {
"message": "版本:{versionLabel}"
},
"theme.docs.versions.unreleasedVersionLabel": {
"message": "此为 {siteTitle} {versionLabel} 版尚未发行的文档。",
"description": "The label used to tell the user that he's browsing an unreleased doc version"
},
"theme.docs.versions.unmaintainedVersionLabel": {
"message": "此为 {siteTitle} {versionLabel} 版的文档,现已不再积极维护。",
"description": "The label used to tell the user that he's browsing an unmaintained doc version"
},
"theme.docs.versions.latestVersionSuggestionLabel": {
"message": "最新的文档请参阅 {latestVersionLink} ({versionLabel})。",
"description": "The label used to tell the user to check the latest version"
},
"theme.docs.versions.latestVersionLinkLabel": {
"message": "最新版本",
"description": "The label used for the latest version suggestion link label"
},
"theme.common.editThisPage": {
"message": "编辑此页",
"description": "The link label to edit the current page"
},
"theme.common.headingLinkTitle": {
"message": "{heading}的直接链接",
"description": "Title for link to heading"
},
"theme.lastUpdated.atDate": {
"message": "于 {date} ",
"description": "The words used to describe on which date a page has been last updated"
},
"theme.lastUpdated.byUser": {
"message": "由 {user} ",
"description": "The words used to describe by who the page has been last updated"
},
"theme.lastUpdated.lastUpdatedAtBy": {
"message": "最后{byUser}{atDate}更新",
"description": "The sentence used to display when a page has been last updated, and by who"
},
"theme.navbar.mobileVersionsDropdown.label": {
"message": "选择版本",
"description": "The label for the navbar versions dropdown on mobile view"
},
"theme.NotFound.title": {
"message": "找不到页面",
"description": "The title of the 404 page"
},
"theme.tags.tagsListLabel": {
"message": "标签:",
"description": "The label alongside a tag list"
},
"theme.admonition.caution": {
"message": "警告",
"description": "The default label used for the Caution admonition (:::caution)"
},
"theme.admonition.danger": {
"message": "危险",
"description": "The default label used for the Danger admonition (:::danger)"
},
"theme.admonition.info": {
"message": "信息",
"description": "The default label used for the Info admonition (:::info)"
},
"theme.admonition.note": {
"message": "备注",
"description": "The default label used for the Note admonition (:::note)"
},
"theme.admonition.tip": {
"message": "提示",
"description": "The default label used for the Tip admonition (:::tip)"
},
"theme.admonition.warning": {
"message": "注意",
"description": "The default label used for the Warning admonition (:::warning)"
},
"theme.AnnouncementBar.closeButtonAriaLabel": {
"message": "关闭",
"description": "The ARIA label for close button of announcement bar"
},
"theme.blog.sidebar.navAriaLabel": {
"message": "最近博文导航",
"description": "The ARIA label for recent posts in the blog sidebar"
},
"theme.CodeBlock.copied": {
"message": "复制成功",
"description": "The copied button label on code blocks"
},
"theme.CodeBlock.copyButtonAriaLabel": {
"message": "复制代码到剪贴板",
"description": "The ARIA label for copy code blocks button"
},
"theme.CodeBlock.copy": {
"message": "复制",
"description": "The copy button label on code blocks"
},
"theme.CodeBlock.wordWrapToggle": {
"message": "切换自动换行",
"description": "The title attribute for toggle word wrapping button of code block lines"
},
"theme.DocSidebarItem.expandCategoryAriaLabel": {
"message": "展开侧边栏分类 '{label}'",
"description": "The ARIA label to expand the sidebar category"
},
"theme.DocSidebarItem.collapseCategoryAriaLabel": {
"message": "折叠侧边栏分类 '{label}'",
"description": "The ARIA label to collapse the sidebar category"
},
"theme.NavBar.navAriaLabel": {
"message": "主导航",
"description": "The ARIA label for the main navigation"
},
"theme.navbar.mobileLanguageDropdown.label": {
"message": "选择语言",
"description": "The label for the mobile language switcher dropdown"
},
"theme.NotFound.p1": {
"message": "我们找不到您要找的页面。",
"description": "The first paragraph of the 404 page"
},
"theme.NotFound.p2": {
"message": "请联系原始链接来源网站的所有者,并告知他们链接已损坏。",
"description": "The 2nd paragraph of the 404 page"
},
"theme.TOCCollapsible.toggleButtonLabel": {
"message": "本页总览",
"description": "The label used by the button on the collapsible TOC component"
},
"theme.blog.post.readMore": {
"message": "阅读更多",
"description": "The label used in blog post item excerpts to link to full blog posts"
},
"theme.blog.post.readMoreLabel": {
"message": "阅读 {title} 的全文",
"description": "The ARIA label for the link to full blog posts from excerpts"
},
"theme.blog.post.readingTime.plurals": {
"message": "阅读需 {readingTime} 分钟",
"description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.docs.breadcrumbs.home": {
"message": "主页面",
"description": "The ARIA label for the home page in the breadcrumbs"
},
"theme.docs.sidebar.collapseButtonTitle": {
"message": "收起侧边栏",
"description": "The title attribute for collapse button of doc sidebar"
},
"theme.docs.sidebar.collapseButtonAriaLabel": {
"message": "收起侧边栏",
"description": "The title attribute for collapse button of doc sidebar"
},
"theme.docs.sidebar.navAriaLabel": {
"message": "文档侧边栏",
"description": "The ARIA label for the sidebar navigation"
},
"theme.docs.sidebar.closeSidebarButtonAriaLabel": {
"message": "关闭导航栏",
"description": "The ARIA label for close button of mobile sidebar"
},
"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": {
"message": "← 回到主菜单",
"description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"
},
"theme.docs.sidebar.toggleSidebarButtonAriaLabel": {
"message": "切换导航栏",
"description": "The ARIA label for hamburger menu button of mobile navigation"
},
"theme.docs.sidebar.expandButtonTitle": {
"message": "展开侧边栏",
"description": "The ARIA label and title attribute for expand button of doc sidebar"
},
"theme.docs.sidebar.expandButtonAriaLabel": {
"message": "展开侧边栏",
"description": "The ARIA label and title attribute for expand button of doc sidebar"
},
"theme.ErrorPageContent.tryAgain": {
"message": "重试",
"description": "The label of the button to try again rendering when the React error boundary captures an error"
},
"theme.common.skipToMainContent": {
"message": "跳到主要内容",
"description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"
},
"theme.tags.tagsPageTitle": {
"message": "标签",
"description": "The title of the tag list page"
},
"theme.unlistedContent.title": {
"message": "未列出页",
"description": "The unlisted content banner title"
},
"theme.unlistedContent.message": {
"message": "此页面未列出。搜索引擎不会对其索引,只有拥有直接链接的用户才能访问。",
"description": "The unlisted content banner message"
}
}

View File

@ -0,0 +1,14 @@
{
"title": {
"message": "博客",
"description": "The title for the blog used in SEO"
},
"description": {
"message": "博客",
"description": "The description for the blog used in SEO"
},
"sidebar.title": {
"message": "最近文章",
"description": "The label for the left sidebar"
}
}

View File

@ -0,0 +1,18 @@
{
"version.label": {
"message": "Next",
"description": "The label for version current"
},
"sidebar.docsSidebar.category.🤖 LLM 支持": {
"message": "🤖 LLM 支持",
"description": "The label for category 🤖 LLM 支持 in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.🚧 故障排除": {
"message": "🚧 故障排除",
"description": "The label for category 🚧 故障排除 in sidebar docsSidebar"
},
"sidebar.apiSidebar.category.Backend": {
"message": "Backend",
"description": "The label for category Backend in sidebar apiSidebar"
}
}

View File

@ -0,0 +1,3 @@
# Python 文档
部署后文档将会显示在这里。

View File

@ -0,0 +1,5 @@
{
"items": ["python/python"],
"label": "后端",
"type": "category"
}

View File

@ -0,0 +1,53 @@
---
sidebar_position: 7
---
# 📚 杂项
## ⭐️ 研究策略
通过 LLM 完全复制生产级应用程序是一个复杂的任务。我们的策略包含以下几个方面:
1. **核心技术研究:** 专注于基础研究,以理解和改进代码生成和处理的技术方面。
2. **专家能力:** 通过数据策划、训练方法等方式增强核心组件的有效性。
3. **任务规划:** 开发错误检测、代码库管理和优化的能力。
4. **评价:** 建立全面的评价指标,以更好地理解和改进我们的模型。
## 🚧 默认代理
- 我们当前的默认代理是 CodeActAgent具备生成代码和处理文件的能力。我们正在开发其他代理实现包括 [SWE Agent](https://swe-agent.com/)。您可以[在这里阅读我们当前的代理集合](./agents)。
## 🤝 如何贡献
OpenDevin 是一个社区驱动的项目,我们欢迎每个人的贡献。无论您是开发人员、研究人员,还是对用 AI 提升软件工程领域有兴趣,只要您愿意参与,我们都有很多方式可供选择:
- **代码贡献:** 帮助我们开发核心功能、前端界面或沙箱解决方案。
- **研究和评价:** 贡献您对 LLM 在软件工程领域理解的见解,参与评估模型,或提出改进建议。
- **反馈和测试:** 使用 OpenDevin 工具集,报告错误,建议功能,或提供可用性方面的反馈。
详情请查阅[此文件](https://github.com/OpenDevin/OpenDevin/blob/main/CONTRIBUTING.md)。
## 🤖 加入我们的社区
我们现在有一个 Slack 工作区,用于合作建设 OpenDevin还设有一个 Discord 服务器用于讨论与该项目、LLM、代理等相关的任何事情。
- [Slack 工作区](https://join.slack.com/t/opendevin/shared_invite/zt-2jsrl32uf-fTeeFjNyNYxqSZt5NPY3fA)
- [Discord 服务器](https://discord.gg/ESHStjSjD4)
如果您愿意贡献,请随时加入我们的社区。让我们一起简化软件工程!
🐚 **少写代码,用 OpenDevin 做更多的事情。**
[![Star History Chart](https://api.star-history.com/svg?repos=OpenDevin/OpenDevin&type=Date)](https://star-history.com/#OpenDevin/OpenDevin&Date)
## 🛠️ 技术选型
OpenDevin 使用了一系列强大的框架和库,提供了坚实的开发基础。以下是项目中使用的关键技术:
![FastAPI](https://img.shields.io/badge/FastAPI-black?style=for-the-badge) ![uvicorn](https://img.shields.io/badge/uvicorn-black?style=for-the-badge) ![LiteLLM](https://img.shields.io/badge/LiteLLM-black?style=for-the-badge) ![Docker](https://img.shields.io/badge/Docker-black?style=for-the-badge) ![Ruff](https://img.shields.io/badge/Ruff-black?style=for-the-badge) ![MyPy](https://img.shields.io/badge/MyPy-black?style=for-the-badge) ![LlamaIndex](https://img.shields.io/badge/LlamaIndex-black?style=for-the-badge) ![React](https://img.shields.io/badge/React-black?style=for-the-badge)
请注意,这些技术选型仍在进行中,随着项目的发展,可能会添加新的技术或移除现有的技术。我们努力采用最适合、最高效的工具,以增强 OpenDevin 的能力。
## 📜 许可证
根据 MIT 许可证分发。详见[我们的许可证](https://github.com/OpenDevin/OpenDevin/blob/main/LICENSE)了解更多信息。

View File

@ -0,0 +1,142 @@
---
sidebar_position: 3
---
# 🧠 Agents and Capabilities
## CodeAct Agent
### 描述
该Agent实现了CodeAct的思想[论文](https://arxiv.org/abs/2402.01030)[推特](https://twitter.com/xingyaow_/status/1754556835703751087)将LLM agents的**行为**合并到一个统一的**代码**动作空间中以实现_简化_和_性能_详情见论文
概念理念如下图所示。在每个回合Agent可以
1. **对话**:用自然语言与人类交流,进行澄清、确认等。
2. **CodeAct**:选择通过执行代码来完成任务
- 执行任何有效的Linux `bash`命令
- 使用[交互式Python解释器](https://ipython.org/)执行任何有效的 `Python`代码。这是通过`bash`命令模拟的,详细信息请参见插件系统。
![image](https://github.com/OpenDevin/OpenDevin/assets/38853559/92b622e3-72ad-4a61-8f41-8c040b6d5fb3)
### 插件系统
为了使CodeAct agent在仅能访问`bash`动作空间时更强大CodeAct agent利用了OpenDevin的插件系统
- [Jupyter插件](https://github.com/OpenDevin/OpenDevin/tree/main/opendevin/runtime/plugins/jupyter)通过bash命令实现IPython执行
- [SWE-agent工具插件](https://github.com/OpenDevin/OpenDevin/tree/main/opendevin/runtime/plugins/swe_agent_commands)为软件开发任务引入的强大bash命令行工具由[swe-agent](https://github.com/princeton-nlp/swe-agent)提供。
### 演示
https://github.com/OpenDevin/OpenDevin/assets/38853559/f592a192-e86c-4f48-ad31-d69282d5f6ac
_CodeActAgent使用`gpt-4-turbo-2024-04-09`执行数据科学任务线性回归的示例_
### 动作
`Action`,
`CmdRunAction`,
`IPythonRunCellAction`,
`AgentEchoAction`,
`AgentFinishAction`,
`AgentTalkAction`
### 观测
`CmdOutputObservation`,
`IPythonRunCellObservation`,
`AgentMessageObservation`,
`UserMessageObservation`
### 方法
| 方法 | 描述 |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `__init__` | 使用`llm`和一系列信息`list[Mapping[str, str]]`初始化Agent |
| `step` | 使用CodeAct Agent执行一步操作包括收集前一步的信息并提示模型执行命令。 |
| `search_memory`| 尚未实现 |
### 进行中的工作 & 下一步
[] 支持Web浏览
[] 完成CodeAct agent提交Github PR的工作流程
## Monologue Agent
### 描述
Monologue Agent利用长短期记忆来完成任务。
长期记忆存储为LongTermMemory对象模型使用它来搜索过去的示例。
短期记忆存储为Monologue对象模型可以根据需要进行压缩。
### 动作
`Action`,
`NullAction`,
`CmdRunAction`,
`FileWriteAction`,
`FileReadAction`,
`AgentRecallAction`,
`BrowseURLAction`,
`GithubPushAction`,
`AgentThinkAction`
### 观测
`Observation`,
`NullObservation`,
`CmdOutputObservation`,
`FileReadObservation`,
`AgentRecallObservation`,
`BrowserOutputObservation`
### 方法
| 方法 | 描述 |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `__init__` | 使用长期记忆和内部独白初始化Agent |
| `_add_event` | 将事件附加到Agent的独白中如独白过长自动与摘要一起压缩 |
| `_initialize` | 使用`INITIAL_THOUGHTS`列表为agent提供其能力的上下文以及如何导航`/workspace` |
| `step` | 通过添加最近的动作和观测修改当前状态,然后提示模型考虑其接下来的动作。 |
| `search_memory`| 使用`VectorIndexRetriever`在长期记忆中查找相关记忆。 |
## Planner Agent
### 描述
Planner agent利用特殊的提示策略为解决问题创建长期计划。
在每一步中Agent会获得其先前的动作-观测对、当前任务以及基于上一次操作提供的提示。
### 动作
`NullAction`,
`CmdRunAction`,
`CmdKillAction`,
`BrowseURLAction`,
`GithubPushAction`,
`FileReadAction`,
`FileWriteAction`,
`AgentRecallAction`,
`AgentThinkAction`,
`AgentFinishAction`,
`AgentSummarizeAction`,
`AddTaskAction`,
`ModifyTaskAction`
### 观测
`Observation`,
`NullObservation`,
`CmdOutputObservation`,
`FileReadObservation`,
`AgentRecallObservation`,
`BrowserOutputObservation`
### 方法
| 方法 | 描述 |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `__init__` | 使用`llm`初始化Agent |
| `step` | 检查当前步骤是否完成,如果是则返回`AgentFinishAction`。否则,创建计划提示并发送给模型进行推理,将结果作为下一步动作。 |
| `search_memory`| 尚未实现 |

View File

@ -0,0 +1,49 @@
---
sidebar_position: 4
---
# 🏛️ 系统架构概览
这是系统架构的高层概览。系统分为两个主要组件:前端和后端。前端负责处理用户交互并显示结果。后端负责处理业务逻辑并执行代理。
![system_architecture.svg](/img/system_architecture.svg)
此概览简化显示了主要组件及其交互。有关后端架构的更详细视图,请参见[后端架构](#backend-architecture-zh-Hans)部分。
# 后端架构 {#backend-architecture-zh-Hans}
_**免责声明**后端架构正在进行中可能会有所变化。下图显示了基于图表页脚中的提交内容的当前后端架构。_
![backend_architecture.svg](/img/backend_architecture.svg)
<details>
<summary>更新此图表</summary>
<div>
后端架构图的生成部分是自动化的。
图表是使用 py2puml 工具从代码中的类型提示生成的。
然后人工审核、调整并导出为 PNG 和 SVG。
## 前提条件
- 能运行 python 环境,其中 opendevin 可以执行(根据存储库根目录中的 README.md 文件中的说明)
- 安装了 [py2puml](https://github.com/lucsorel/py2puml)
## 步骤
1. 通过从存储库根目录运行以下命令自动生成图表:
`py2puml opendevin opendevin > docs/architecture/backend_architecture.puml`
2. 在 PlantUML 编辑器中打开生成的文件,例如使用 PlantUML 扩展的 Visual Studio Code 或 [PlantText](https://www.planttext.com/)
3. 审查生成的 PUML 并对图表进行所有必要的调整(添加缺失部分、修正错误、改进定位)。
_py2puml 根据代码中的类型提示创建图表因此缺失或不正确的类型提示可能导致图表不完整或不正确。_
4. 审查新旧图表之间的差异,并手动检查更改是否正确。
_确保不移除过去手动添加到图表中的和仍然相关的部分。_
5. 将用于生成图表的提交哈希添加到图表页脚。
6. 将图表导出为 PNG 和 SVG 文件,并替换 `docs/architecture` 目录中的现有图表。这可以通过(例如 [PlantText](https://www.planttext.com/))完成。
</div>
</details>

View File

@ -0,0 +1,18 @@
---
sidebar_position: 6
---
# ✅ 提供反馈
在使用 OpenDevin 时,你无疑会遇到一些情况,某些地方工作得很好,而另一些地方则可能不尽如人意。我们鼓励你在使用 OpenDevin 时提供反馈这不仅有助于开发团队改善应用更为重要的是可以创建一个开放的编码代理训练样例语料库——Share-OpenDevin
## 📝 如何提供反馈
提供反馈很简单!在使用 OpenDevin 时,你可以在任意时刻按下点赞或点踩按钮。你将被要求提供你的电子邮件地址(例如,以便我们在需要进一步询问时联系你),你可以选择公开或私密地提供反馈。
<iframe width="560" height="315" src="https://www.youtube.com/embed/5rFx-StMVV0?si=svo7xzp6LhGK_GXr" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## 📜 数据许可与隐私
* **公开** 数据将与 OpenDevin 本身一样以 MIT 许可协议发布,并可被社区用来训练和测试模型。显然,你能够公开的反馈对整个社区来说更有价值,因此当你不涉及敏感信息时,我们鼓励你选择这个选项!
* **私密** 数据将仅与 OpenDevin 团队分享,用于改进 OpenDevin。

View File

@ -0,0 +1,111 @@
---
sidebar_position: 1
---
# 💻 OpenDevin
OpenDevin 是一个**自主 AI 软件工程师**,能够执行复杂的工程任务,并在软件开发项目中积极与用户合作。
这个项目是完全开源的,所以你可以随意使用和修改它。
:::tip
在 [GitHub](https://github.com/OpenDevin/OpenDevin) 上探索 OpenDevin 的代码库或加入我们的社区!
<a href="https://github.com/OpenDevin/OpenDevin/graphs/contributors">
<img
src="https://img.shields.io/github/contributors/opendevin/opendevin?style=for-the-badge"
alt="Contributors"
/>
</a>
<a href="https://github.com/OpenDevin/OpenDevin/network/members">
<img
src="https://img.shields.io/github/forks/opendevin/opendevin?style=for-the-badge"
alt="Forks"
/>
</a>
<a href="https://github.com/OpenDevin/OpenDevin/stargazers">
<img
src="https://img.shields.io/github/stars/opendevin/opendevin?style=for-the-badge"
alt="Stargazers"
/>
</a>
<a href="https://github.com/OpenDevin/OpenDevin/issues">
<img
src="https://img.shields.io/github/issues/opendevin/opendevin?style=for-the-badge"
alt="Issues"
/>
</a>
<br></br>
<a href="https://github.com/OpenDevin/OpenDevin/blob/main/LICENSE">
<img
src="https://img.shields.io/github/license/opendevin/opendevin?style=for-the-badge"
alt="MIT License"
/>
</a>
<br></br>
<a href="https://join.slack.com/t/opendevin/shared_invite/zt-2jsrl32uf-fTeeFjNyNYxqSZt5NPY3fA">
<img
src="https://img.shields.io/badge/Slack-Join%20Us-red?logo=slack&logoColor=white&style=for-the-badge"
alt="Join our Slack community"
/>
</a>
<a href="https://discord.gg/ESHStjSjD4">
<img
src="https://img.shields.io/badge/Discord-Join%20Us-purple?logo=discord&logoColor=white&style=for-the-badge"
alt="Join our Discord community"
/>
</a>
:::
## 🛠️ 入门指南
运行 OpenDevin 最简单的方法是在 Docker 容器中。它在 Docker 的最新版本 `26.0.0` 上运行效果最佳。
你必须使用 Linux、Mac OS 或 Windows 上的 WSL。
要在 Docker 容器中启动 OpenDevin请在终端中运行以下命令
:::warning
运行以下命令时,`./workspace` 中的文件可能会被修改或删除。
:::
```bash
WORKSPACE_BASE=$(pwd)/workspace
docker run -it \
--pull=always \
-e SANDBOX_USER_ID=$(id -u) \
-e PERSIST_SANDBOX="true" \
-e SSH_PASSWORD="make something up here" \
-e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \
-v $WORKSPACE_BASE:/opt/workspace_base \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name opendevin-app-$(date +%Y%m%d%H%M%S) \
ghcr.io/opendevin/opendevin:0.6
```
你会发现 OpenDevin 在 [http://localhost:3000](http://localhost:3000) 运行,并可以访问 `./workspace`。要让 OpenDevin 操作你的代码,请将代码放在 `./workspace` 中。
OpenDevin 只会访问这个工作区文件夹。它在一个安全的 docker 沙盒中运行,不会影响你系统的其他部分。
:::tip
如果你想使用**(不稳定!)**最新版本,可以使用 `ghcr.io/opendevin/opendevin:main` 作为镜像(最后一行)。
:::
有关开发工作流程,请参阅 [Development.md](https://github.com/OpenDevin/OpenDevin/blob/main/Development.md)。
遇到问题了吗?查看我们的 [故障排除指南](https://opendevin.github.io/OpenDevin/modules/usage/troubleshooting)。
:::warning
OpenDevin 目前正在开发中,但你已经可以运行 alpha 版本来查看端到端系统的运作情况。
:::
[contributors-shield]: https://img.shields.io/github/contributors/opendevin/opendevin?style=for-the-badge
[contributors-url]: https://github.com/OpenDevin/OpenDevin/graphs/contributors
[forks-shield]: https://img.shields.io/github/forks/opendevin/opendevin?style=for-the-badge
[forks-url]: https://github.com/OpenDevin/OpenDevin/network/members
[stars-shield]: https://img.shields.io/github/stars/opendevin/opendevin?style=for-the-badge
[stars-url]: https://github.com/OpenDevin/OpenDevin/stargazers
[issues-shield]: https://img.shields.io/github/issues/opendevin/opendevin?style=for-the-badge
[issues-url]: https://github.com/OpenDevin/OpenDevin/issues
[license-shield]: https://img.shields.io/github/license/opendevin/opendevin?style=for-the-badge
[license-url]: https://github.com/OpenDevin/OpenDevin/blob/main/LICENSE

View File

@ -0,0 +1,37 @@
# Azure OpenAI 大型语言模型
## 完成
OpenDevin 使用 LiteLLM 进行完成调用。你可以在 Azure 的文档中找到他们的文档 [这里](https://docs.litellm.ai/docs/providers/azure)
### Azure openai 配置
在运行 OpenDevin Docker 镜像时,你需要使用 `-e` 设置以下环境变量:
```
LLM_BASE_URL="<azure-api-base-url>" # 示例: "https://openai-gpt-4-test-v-1.openai.azure.com/"
LLM_API_KEY="<azure-api-key>"
LLM_MODEL="azure/<your-gpt-deployment-name>"
LLM_API_VERSION = "<api-version>" # 示例: "2024-02-15-preview"
```
:::note
你可以在 Azure 的部署页面找到你的 ChatGPT 部署名称。它可能与默认或最初设置的聊天模型名称相同(例如 'GPT4-1106-preview'),但不一定相同。运行 OpenDevin当你在浏览器中加载它时进入设置并按照上述方式设置模型: "azure/&lt;your-actual-gpt-deployment-name&gt;"。如果列表中没有,请输入你自己的文本并保存。
:::
## 嵌入
OpenDevin 使用 llama-index 进行嵌入。你可以在 Azure 的文档中找到他们的文档 [这里](https://docs.llamaindex.ai/en/stable/api_reference/embeddings/azure_openai/)
### Azure openai 配置
Azure OpenAI 嵌入使用的模型是 "text-embedding-ada-002"。
你需要在你的 Azure 账户中为这个模型设置正确的部署名称。
在 Docker 中运行 OpenDevin 时,使用 `-e` 设置以下环境变量:
```
LLM_EMBEDDING_MODEL="azureopenai"
LLM_EMBEDDING_DEPLOYMENT_NAME = "<your-embedding-deployment-name>" # 示例: "TextEmbedding...<etc>"
LLM_API_VERSION = "<api-version>" # 示例: "2024-02-15-preview"
```

View File

@ -0,0 +1,28 @@
# Google Gemini/Vertex LLM
## Completion
OpenDevin 使用 LiteLLM 进行补全调用。以下资源与使用 OpenDevin 和 Google 的 LLM 相关:
- [Gemini - Google AI Studio](https://docs.litellm.ai/docs/providers/gemini)
- [VertexAI - Google Cloud Platform](https://docs.litellm.ai/docs/providers/vertex)
### Gemini - Google AI Studio 配置
在运行 OpenDevin Docker 镜像时,通过 Google AI Studio 使用 Gemini你需要使用 `-e` 设置以下环境变量:
```
GEMINI_API_KEY="<your-google-api-key>"
LLM_MODEL="gemini/gemini-1.5-pro"
```
### Vertex AI - Google Cloud Platform 配置
在运行 OpenDevin Docker 镜像时,通过 Google Cloud Platform 使用 Vertex AI你需要使用 `-e` 设置以下环境变量:
```
GOOGLE_APPLICATION_CREDENTIALS="<json-dump-of-gcp-service-account-json>"
VERTEXAI_PROJECT="<your-gcp-project-id>"
VERTEXAI_LOCATION="<your-gcp-location>"
LLM_MODEL="vertex_ai/<desired-llm-model>"
```

View File

@ -0,0 +1,46 @@
---
sidebar_position: 2
---
# 🤖 LLM 支持
OpenDevin 可以兼容任何 LLM 后端。
关于所有可用 LM 提供商和模型的完整列表,请参阅
[litellm 文档](https://docs.litellm.ai/docs/providers)。
:::warning
OpenDevin 将向你配置的 LLM 发出许多提示。大多数这些 LLM 都是收费的——请务必设定支出限额并监控使用情况。
:::
`LLM_MODEL` 环境变量控制在编程交互中使用的模型。
但在使用 OpenDevin UI 时,你需要在设置窗口中选择你的模型(左下角的齿轮)。
某些 LLM 可能需要以下环境变量:
- `LLM_API_KEY`
- `LLM_BASE_URL`
- `LLM_EMBEDDING_MODEL`
- `LLM_EMBEDDING_DEPLOYMENT_NAME`
- `LLM_API_VERSION`
我们有一些指南,介绍了如何使用特定模型提供商运行 OpenDevin
- [ollama](llms/localLLMs)
- [Azure](llms/azureLLMs)
如果你使用其他提供商,我们鼓励你打开一个 PR 来分享你的配置!
## 关于替代模型的注意事项
最好的模型是 GPT-4 和 Claude 3。目前的本地和开源模型
远没有那么强大。当使用替代模型时,
你可能会看到信息之间的长时间等待,
糟糕的响应,或关于 JSON格式错误的错误。OpenDevin
的强大程度依赖于其驱动的模型——幸运的是,我们团队的人员
正在积极致力于构建更好的开源模型!
## API 重试和速率限制
一些 LLM 有速率限制可能需要重试操作。OpenDevin 会在收到 429 错误或 API 连接错误时自动重试请求。
你可以设置 `LLM_NUM_RETRIES``LLM_RETRY_MIN_WAIT``LLM_RETRY_MAX_WAIT` 环境变量来控制重试次数和重试之间的时间。
默认情况下,`LLM_NUM_RETRIES` 为 5`LLM_RETRY_MIN_WAIT``LLM_RETRY_MAX_WAIT` 分别为 3 秒和 60 秒。

View File

@ -0,0 +1,140 @@
# 使用 Ollama 的本地 LLM
确保您的 Ollama 服务器已启动运行。有关详细的启动说明,请参阅[此处](https://github.com/ollama/ollama)
本指南假定您已通过 `ollama serve` 启动 ollama。如果您以其他方式运行 ollama例如在 docker 内),说明可能需要进行修改。请注意,如果您在运行 WSL默认的 ollama 配置会阻止来自 docker 容器的请求。请参阅[此处](#configuring-ollama-service-zh-Hans)。
## 拉取模型
Ollama 模型名称可以在[这里](https://ollama.com/library)找到。一个小例子,您可以使用
`codellama:7b` 模型。较大的模型通常表现更好。
```bash
ollama pull codellama:7b
```
您可以这样检查已下载的模型:
```bash
~$ ollama list
NAME ID SIZE MODIFIED
codellama:7b 8fdf8f752f6e 3.8 GB 6 weeks ago
mistral:7b-instruct-v0.2-q4_K_M eb14864c7427 4.4 GB 2 weeks ago
starcoder2:latest f67ae0f64584 1.7 GB 19 hours ago
```
## 启动 OpenDevin
### Docker
使用[此处](../intro)的说明通过 Docker 启动 OpenDevin。
但是在运行 `docker run` 时,您需要添加一些额外的参数:
```bash
--add-host host.docker.internal:host-gateway \
-e LLM_API_KEY="ollama" \
-e LLM_BASE_URL="http://host.docker.internal:11434" \
```
例如:
```bash
# 您希望 OpenDevin 修改的目录。必须是绝对路径!
export WORKSPACE_BASE=$(pwd)/workspace
docker run \
-it \
--pull=always \
--add-host host.docker.internal:host-gateway \
-e SANDBOX_USER_ID=$(id -u) \
-e LLM_API_KEY="ollama" \
-e LLM_BASE_URL="http://host.docker.internal:11434" \
-e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \
-v $WORKSPACE_BASE:/opt/workspace_base \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 3000:3000 \
ghcr.io/opendevin/opendevin:main
```
现在您应该可以连接到 `http://localhost:3000/`
### 从源代码构建
使用[Development.md](https://github.com/OpenDevin/OpenDevin/blob/main/Development.md)中的说明构建 OpenDevin。
通过运行 `make setup-config` 确保 `config.toml` 存在,这将为您创建一个。在 `config.toml` 中,输入以下内容:
```
LLM_MODEL="ollama/codellama:7b"
LLM_API_KEY="ollama"
LLM_EMBEDDING_MODEL="local"
LLM_BASE_URL="http://localhost:11434"
WORKSPACE_BASE="./workspace"
WORKSPACE_DIR="$(pwd)/workspace"
```
如有需要,可以替换您选择的 `LLM_MODEL`
完成!现在您可以通过 `make run` 启动 Devin 而无需 Docker。现在您应该可以连接到 `http://localhost:3000/`
## 选择您的模型
在 OpenDevin UI 中,点击左下角的设置齿轮。
然后在 `Model` 输入中,输入 `ollama/codellama:7b`,或者您之前拉取的模型名称。
如果它没有出现在下拉列表中,也没关系,只需输入即可。完成后点击保存。
现在您已经准备好了!
## 配置 ollama 服务WSL{#configuring-ollama-service-zh-Hans}
WSL 中 ollama 的默认配置仅为 localhost 提供服务。这意味着您无法从 docker 容器中访问它。比如,它不会与 OpenDevin 一起工作。首先让我们测试 ollama 是否正常运行。
```bash
ollama list # 获取已安装模型列表
curl http://localhost:11434/api/generate -d '{"model":"[NAME]","prompt":"hi"}'
#例如curl http://localhost:11434/api/generate -d '{"model":"codellama:7b","prompt":"hi"}'
#例如curl http://localhost:11434/api/generate -d '{"model":"codellama","prompt":"hi"}' # 如果只有一个模型,标签是可选的
```
完成后,测试它是否允许“外部”请求,比如那些来自 docker 容器内的请求。
```bash
docker ps # 获取正在运行的 docker 容器列表,最准确的测试选择 open devin sandbox 容器。
docker exec [CONTAINER ID] curl http://host.docker.internal:11434/api/generate -d '{"model":"[NAME]","prompt":"hi"}'
#例如docker exec cd9cc82f7a11 curl http://host.docker.internal:11434/api/generate -d '{"model":"codellama","prompt":"hi"}'
```
## 修复它
现在让我们使其工作。使用 sudo 权限编辑 /etc/systemd/system/ollama.service。 (路径可能因 linux 版本而异)
```bash
sudo vi /etc/systemd/system/ollama.service
```
或者
```bash
sudo nano /etc/systemd/system/ollama.service
```
在 [Service] 括号内添加以下行
```
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"
```
然后保存,重新加载配置并重新启动服务。
```bash
sudo systemctl daemon-reload
sudo systemctl restart ollama
```
最后测试 ollama 是否可以从容器内访问
```bash
ollama list # 获取已安装模型列表
docker ps # 获取正在运行的 docker 容器列表,最准确的测试选择 open devin sandbox 容器。
docker exec [CONTAINER ID] curl http://host.docker.internal:11434/api/generate -d '{"model":"[NAME]","prompt":"hi"}'
```

View File

@ -0,0 +1,194 @@
---
sidebar_position: 5
---
# 🚧 故障排除
以下是用户经常报告的一些错误信息。
我们将努力使安装过程更加简单,并改善这些错误信息。不过,现在您可以在下面找到您的错误信息,并查看是否有任何解决方法。
对于这些错误信息,**都已经有相关的报告**。请不要打开新的报告——只需在现有的报告中发表评论即可。
如果您发现更多信息或者一个解决方法,请提交一个 *PR* 来添加细节到这个文件中。
:::tip
如果您在 Windows 上运行并遇到问题,请查看我们的[Windows (WSL) 用户指南](troubleshooting/windows)。
:::
## 无法连接到 Docker
[GitHub 问题](https://github.com/OpenDevin/OpenDevin/issues/1226)
### 症状
```bash
创建控制器时出错。请检查 Docker 是否正在运行,并访问 `https://opendevin.github.io/OpenDevin/modules/usage/troubleshooting` 获取更多调试信息。
```
```bash
docker.errors.DockerException: 获取服务器 API 版本时出错: ('连接中止。', FileNotFoundError(2, '没有这样的文件或目录'))
```
### 详情
OpenDevin 使用 Docker 容器来安全地完成工作,而不会破坏您的机器。
### 解决方法
* 运行 `docker ps` 以确保 Docker 正在运行
* 确保您不需要使用 `sudo` 运行 Docker [请参见此处](https://www.baeldung.com/linux/docker-run-without-sudo)
* 如果您使用的是 Mac请检查[权限要求](https://docs.docker.com/desktop/mac/permission-requirements/) ,特别是考虑在 Docker Desktop 的 `Settings > Advanced` 下启用 `Allow the default Docker socket to be used`
* 另外,升级您的 Docker 到最新版本,选择 `Check for Updates`
## 无法连接到 DockerSSHBox
[GitHub 问题](https://github.com/OpenDevin/OpenDevin/issues/1156)
### 症状
```python
self.shell = DockerSSHBox(
...
pexpect.pxssh.ExceptionPxssh: Could not establish connection to host
```
### 详情
默认情况下OpenDevin 使用 SSH 连接到一个运行中的容器。在某些机器上,尤其是 Windows这似乎会失败。
### 解决方法
* 重新启动您的计算机(有时会有用)
* 确保拥有最新版本的 WSL 和 Docker
* 检查您的 WSL 分发版也已更新
* 尝试[此重新安装指南](https://github.com/OpenDevin/OpenDevin/issues/1156#issuecomment-2064549427)
* 设置 `-e SANDBOX_TYPE=exec` 切换到 ExecBox Docker 容器
## 无法连接到 LLM
[GitHub 问题](https://github.com/OpenDevin/OpenDevin/issues/1208)
### 症状
```python
File "/app/.venv/lib/python3.12/site-packages/openai/_exceptions.py", line 81, in __init__
super().__init__(message, response.request, body=body)
^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'request'
```
### 详情
[GitHub 问题](https://github.com/OpenDevin/OpenDevin/issues?q=is%3Aissue+is%3Aopen+404)
这通常发生在本地 LLM 设置中,当 OpenDevin 无法连接到 LLM 服务器时。请参阅我们的 [本地 LLM 指南](llms/localLLMs) 以获取更多信息。
### 解决方法
* 检查您的 `config.toml` 文件中 "llm" 部分的 `base_url` 是否正确(如果存在)
* 检查 Ollama或您使用的其他 LLM是否正常运行
* 确保在 Docker 中运行时使用 `--add-host host.docker.internal:host-gateway`
## `404 Resource not found 资源未找到`
### 症状
```python
Traceback (most recent call last):
File "/app/.venv/lib/python3.12/site-packages/litellm/llms/openai.py", line 414, in completion
raise e
File "/app/.venv/lib/python3.12/site-packages/litellm/llms/openai.py", line 373, in completion
response = openai_client.chat.completions.create(**data, timeout=timeout) # type: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/openai/_utils/_utils.py", line 277, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/openai/resources/chat/completions.py", line 579, in create
return self._post(
^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1232, in post
return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 921, in request
return self._request(
^^^^^^^^^^^^^^
File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1012, in _request
raise self._make_status_error_from_response(err.response) from None
openai.NotFoundError: Error code: 404 - {'error': {'code': '404', 'message': 'Resource not found'}}
```
### 详情
当 LiteLLM我们用于连接不同 LLM 提供商的库)找不到您要连接的 API 端点时,会发生这种情况。最常见的情况是 Azure 或 Ollama 用户。
### 解决方法
* 检查您是否正确设置了 `LLM_BASE_URL`
* 检查模型是否正确设置,基于 [LiteLLM 文档](https://docs.litellm.ai/docs/providers)
* 如果您在 UI 中运行,请确保在设置模式中设置 `model`
* 如果您通过 main.py 运行,请确保在环境变量/配置中设置 `LLM_MODEL`
* 确保遵循了您的 LLM 提供商的任何特殊说明
* [Ollama](/OpenDevin/zh-Hans/modules/usage/llms/localLLMs)
* [Azure](/OpenDevin/zh-Hans/modules/usage/llms/azureLLMs)
* [Google](/OpenDevin/zh-Hans/modules/usage/llms/googleLLMs)
* 确保您的 API 密钥正确无误
* 尝试使用 `curl` 连接到 LLM
* 尝试[直接通过 LiteLLM 连接](https://github.com/BerriAI/litellm)来测试您的设置
## `make build` 在安装包时卡住
### 症状
安装包时卡在 `Pending...`,没有任何错误信息:
```bash
Package operations: 286 installs, 0 updates, 0 removals
- Installing certifi (2024.2.2): Pending...
- Installing h11 (0.14.0): Pending...
- Installing idna (3.7): Pending...
- Installing sniffio (1.3.1): Pending...
- Installing typing-extensions (4.11.0): Pending...
```
### 详情
在极少数情况下,`make build` 在安装包时似乎会卡住,没有任何错误信息。
### 解决方法
* 包管理器 Poetry 可能会错过用于查找凭据的配置设置keyring
### 解决方法
首先使用 `env` 检查是否存在 `PYTHON_KEYRING_BACKEND` 的值。如果不存在,运行以下命令将其设置为已知值,然后重试构建:
```bash
export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
```
## 会话未恢复
### 症状
通常情况下,当打开 UI 时OpenDevin 会询问是否要恢复或开始新会话。但点击“恢复”仍然会开始一个全新的聊天。
### 详情
按今天的标准安装,会话数据存储在内存中。目前,如果 OpenDevin 的服务重启,以前的会话将失效(生成一个新秘密),因此无法恢复。
### 解决方法
* 通过编辑 OpenDevin 根文件夹中的 `config.toml` 文件,更改配置以使会话持久化,指定一个 `file_store` 和一个绝对路径的 `file_store_path`
```toml
file_store="local"
file_store_path="/absolute/path/to/opendevin/cache/directory"
```
* 在您的 .bashrc 中添加一个固定的 JWT 秘密,如下所示,以便以前的会话 ID 可以被接受。
```bash
EXPORT JWT_SECRET=A_CONST_VALUE
```

View File

@ -0,0 +1,76 @@
# Windows 和 WSL 用户须知
OpenDevin 仅支持通过 [WSL](https://learn.microsoft.com/en-us/windows/wsl/install) 在 Windows 上运行。
请确保在 WSL 终端内运行所有命令。
## 故障排除
### 错误:在此 WSL 2 发行版中找不到 'docker'。
如果您使用的是 Docker Desktop请确保在 WSL 内部调用任何 docker 命令之前启动它。
Docker 还需要启用 WSL 集成选项。
### 建议:不要以 root 用户身份运行
出于安全原因,非常建议不要以 root 用户身份运行 OpenDevin而是使用 UID 非零的用户身份运行。
此外,当以 root 身份运行时,不支持持久化沙箱,并且在启动 OpenDevin 时可能会出现相应消息。
参考资料:
* [为什么以 root 登录是不好的](https://askubuntu.com/questions/16178/why-is-it-bad-to-log-in-as-root)
* [在 WSL 中设置默认用户](https://www.tenforums.com/tutorials/128152-set-default-user-windows-subsystem-linux-distro-windows-10-a.html#option2)
关于第二个参考资料的小提示:对于 Ubuntu 用户,该命令实际上可能是 "ubuntupreview" 而不是 "ubuntu"。
### 创建 opendevin 用户失败
如果您在设置过程中遇到以下错误:
```sh
Exception: Failed to create opendevin user in sandbox: 'useradd: UID 0 is not unique'
```
您可以通过运行以下命令解决:
```sh
export SANDBOX_USER_ID=1000
```
### Poetry 安装
* 如果在构建过程中安装 Poetry 后仍然面临运行 Poetry 的问题,您可能需要将其二进制路径添加到您的环境变量:
```sh
export PATH="$HOME/.local/bin:$PATH"
```
* 如果 make build 停止并出现如下错误:
```sh
ModuleNotFoundError: no module named <module-name>
```
这可能是 Poetry 缓存的问题。
尝试运行以下两个命令:
```sh
rm -r ~/.cache/pypoetry
make build
```
### NoneType 对象没有属性 'request'
如果您在执行 `make run` 时遇到与网络相关的问题,例如 `NoneType object has no attribute 'request'`,您可能需要配置您的 WSL2 网络设置。请按照以下步骤操作:
* 打开或创建位于 Windows 主机机器上的 `C:\Users\%username%\.wslconfig` 文件。
* 向 `.wslconfig` 文件添加以下配置:
```sh
[wsl2]
networkingMode=mirrored
localhostForwarding=true
```
* 保存 `.wslconfig` 文件。
* 通过退出所有正在运行的 WSL2 实例并在命令提示符或终端中执行 `wsl --shutdown` 命令,完全重启 WSL2。
* 重新启动 WSL 后,尝试再次执行 `make run`
网络问题应该已经解决。

View File

@ -0,0 +1,26 @@
{
"title": {
"message": "OpenDevin",
"description": "The title in the navbar"
},
"logo.alt": {
"message": "OpenDevin",
"description": "The alt text of navbar logo"
},
"item.label.Docs": {
"message": "文档",
"description": "Navbar item with label Docs"
},
"item.label.Codebase": {
"message": "代码库",
"description": "Navbar item with label Codebase"
},
"item.label.FAQ": {
"message": "常见问题",
"description": "Navbar item with label FAQ"
},
"item.label.GitHub": {
"message": "GitHub",
"description": "Navbar item with label GitHub"
}
}

View File

@ -8,9 +8,9 @@ This is a high-level overview of the system architecture. The system is divided
![system_architecture.svg](/img/system_architecture.svg)
This Overview is simplified to show the main components and their interactions. For a more detailed view of the backend architecture, see the [Backend Architecture](#backend-architecture) section.
This Overview is simplified to show the main components and their interactions. For a more detailed view of the backend architecture, see the [Backend Architecture](#backend-architecture-en) section.
# Backend Architecture
# Backend Architecture {#backend-architecture-en}
_**Disclaimer**: The backend architecture is a work in progress and is subject to change. The following diagram shows the current architecture of the backend based on the commit that is shown in the footer of the diagram._

View File

@ -3,7 +3,7 @@
Ensure that you have the Ollama server up and running.
For detailed startup instructions, refer to [here](https://github.com/ollama/ollama)
This guide assumes you've started ollama with `ollama serve`. If you're running ollama differently (e.g. inside docker), the instructions might need to be modified. Please note that if you're running WSL the default ollama configuration blocks requests from docker containers. See [here](#configuring-the-ollama-service-wsl).
This guide assumes you've started ollama with `ollama serve`. If you're running ollama differently (e.g. inside docker), the instructions might need to be modified. Please note that if you're running WSL the default ollama configuration blocks requests from docker containers. See [here](#configuring-ollama-service-wsl-en).
## Pull Models
@ -85,7 +85,7 @@ If it doesnt show up in a dropdown, thats fine, just type it in. Click Sav
And now you're ready to go!
## Configuring the ollama service (WSL)
## Configuring the ollama service (WSL) {#configuring-ollama-service-wsl-en}
The default configuration for ollama in WSL only serves localhost. This means you can't reach it from a docker container. eg. it wont work with OpenDevin. First let's test that ollama is running correctly.

2669
docs/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -15,9 +15,9 @@
"typecheck": "tsc"
},
"dependencies": {
"@docusaurus/core": "3.2.1",
"@docusaurus/plugin-content-pages": "^3.3.2",
"@docusaurus/preset-classic": "3.2.1",
"@docusaurus/core": "^3.4.0",
"@docusaurus/plugin-content-pages": "^3.4.0",
"@docusaurus/preset-classic": "^3.4.0",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
"prism-react-renderer": "^2.3.0",
@ -27,9 +27,9 @@
"react-use": "^17.5.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.2.1",
"@docusaurus/tsconfig": "3.2.1",
"@docusaurus/types": "3.2.1",
"@docusaurus/module-type-aliases": "^3.4.0",
"@docusaurus/tsconfig": "^3.4.0",
"@docusaurus/types": "^3.4.0",
"typescript": "~5.2.2"
},
"browserslist": {

View File

@ -1,18 +1,25 @@
import React from "react";
import { FaSlack, FaDiscord, FaGithub } from "react-icons/fa";
import "../css/footer.css"; // Importing the CSS file
import Translate from '@docusaurus/Translate';
import "../css/footer.css";
function CustomFooter() {
return (
<footer className="custom-footer">
<div className="footer-content">
<div className="footer-top">
<div className="footer-title">OpenDevin</div>
<div className="footer-title">
<Translate id="footer.title">OpenDevin</Translate>
</div>
<div className="footer-link">
<a href="/modules/usage/intro">Docs</a>
<a href="/modules/usage/intro">
<Translate id="footer.docs">Docs</Translate>
</a>
</div>
</div>
<div className="footer-community">Community</div>
<div className="footer-community">
<Translate id="footer.community">Community</Translate>
</div>
<div className="footer-icons">
<a href="https://join.slack.com/t/opendevin/shared_invite/zt-2jsrl32uf-fTeeFjNyNYxqSZt5NPY3fA" target="_blank" rel="noopener noreferrer">
<FaSlack />
@ -25,7 +32,11 @@ function CustomFooter() {
</a>
</div>
<div className="footer-bottom">
<p>Copyright &copy; {new Date().getFullYear()} OpenDevin</p>
<p>
<Translate id="footer.copyright" values={{ year: new Date().getFullYear() }}>
{'Copyright © {year} OpenDevin'}
</Translate>
</p>
</div>
</div>
</footer>

View File

@ -1,8 +1,10 @@
import React from 'react';
import Link from "@docusaurus/Link";
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
import Heading from "@theme/Heading";
import { Demo } from "../Demo/Demo";
import "../../css/homepageHeader.css"; // Importing the CSS file
import Translate from '@docusaurus/Translate';
import "../../css/homepageHeader.css";
export function HomepageHeader() {
const { siteConfig } = useDocusaurusContext();
@ -18,7 +20,7 @@ export function HomepageHeader() {
className="button button--secondary button--lg"
to="/modules/usage/intro"
>
Get Started
<Translate id="homepage.getStarted">Get Started</Translate>
</Link>
</div>
<Demo />
@ -26,4 +28,3 @@ export function HomepageHeader() {
</div>
);
}

View File

@ -1,5 +1,5 @@
import React from "react";
import "../../css/welcome.css"; // Importing the CSS file
import "../../css/welcome.css";
import Translate from '@docusaurus/Translate';
export function Welcome() {
return (
@ -7,10 +7,12 @@ export function Welcome() {
<div className="welcome-container">
<img src="img/logo.png" className="welcome-logo" />
<p className="welcome-text">
<Translate id="welcome.message">
Welcome to OpenDevin, an open-source autonomous AI software engineer
that is capable of executing
complex engineering tasks and collaborating actively with users on
software development projects.
</Translate>
</p>
</div>
</div>

View File

@ -1,86 +1,129 @@
import Layout from "@theme/Layout";
import CustomFooter from "../components/CustomFooter";
import "../css/faq.css";
import Layout from '@theme/Layout';
import '../css/faq.css';
import Translate, { translate } from '@docusaurus/Translate';
export default function FAQ() {
const githubLink = (
<a href="https://github.com/OpenDevin/OpenDevin/issues" target="_blank">GitHub</a>
);
const discordLink = (
<a href="https://discord.gg/mBuDGRzzES" target="_blank">Discord</a>
);
const slackLink = (
<a href="https://join.slack.com/t/opendevin/shared_invite/zt-2jsrl32uf-fTeeFjNyNYxqSZt5NPY3fA" target="_blank">Slack</a>
);
return (
<>
<Layout title="FAQ" description="Frequently Asked Questions">
<div id="faq" className="faq-container">
<div className="faq-title">Frequently Asked Questions</div>
<div className="faq-section">
<div className="faq-section-title">What is OpenDevin?</div>
<p>
<span className="highlight">OpenDevin</span>{" "}
<Layout
title={translate({ id: 'faq.title', message: 'FAQ' })}
description={translate({ id: 'faq.description', message: 'Frequently Asked Questions' })}
>
<div id="faq" className="faq-container">
<div className="faq-title">
<Translate id="faq.title" description="FAQ Title">Frequently Asked Questions</Translate>
</div>
<div className="faq-section">
<div className="faq-section-title">
<Translate id="faq.section.title.1" description="First Section Title">What is OpenDevin?</Translate>
</div>
<p>
<span className="highlight"><Translate id="faq.section.highlight" description="Highlight Text">OpenDevin</Translate></span>{" "}
<Translate id="faq.section.description.1" description="Description for OpenDevin">
is an autonomous software engineer that can solve software engineering
and web-browsing tasks end-to-end. It can perform data science queries, such
as "Find the number of pull requests to the OpenDevin repository in the last
month," and software engineering tasks, such as "Please add tests to this
file and verify that all the tests pass. If they don't fix the file."
</p>
<p>
</Translate>
</p>
<p>
<Translate id="faq.section.description.2" description="Further Description for OpenDevin">
At the same time, OpenDevin is a platform and community for agent developers
to test out and evaluate new agents.
</p>
</Translate>
</p>
</div>
<div className="faq-section">
<div className="faq-section-title">
<Translate id="faq.section.title.2" description="Support Section Title">Support</Translate>
</div>
<div className="faq-section">
<div className="faq-section-title">Support</div>
<div>How can I report an issue with OpenDevin?</div>
<div>
Please file a bug on{" "}
<a href="https://github.com/OpenDevin/OpenDevin/issues" target="_blank">GitHub</a> if
you notice a problem that likely affects others.
If you're having trouble installing, or have general questions, reach out on{" "}
<a href="https://discord.gg/mBuDGRzzES" target="_blank">Discord</a> or{" "}
<a href="https://join.slack.com/t/opendevin/shared_invite/zt-2jsrl32uf-fTeeFjNyNYxqSZt5NPY3fA" target="_blank">Slack</a>.
</div>
<div>
<Translate
id="faq.section.support.answer"
description="Support Answer"
values={{
githubLink: githubLink,
discordLink: discordLink,
slackLink: slackLink,
}}
>
{`Please file a bug on {githubLink} if you notice a problem that likely affects others. If you're having trouble installing, or have general questions, reach out on {discordLink} or {slackLink}.`}
</Translate>
</div>
<div className="faq-section">
<div className="faq-section-title">How to fix a GitHub issue with OpenDevin?</div>
<div className="faq-steps">
</div>
<div className="faq-section">
<div className="faq-section-title">
<Translate id="faq.section.title.3" description="GitHub Issue Section Title">How to fix a GitHub issue with OpenDevin?</Translate>
</div>
<div className="faq-steps">
<Translate id="faq.section.github.steps.intro" description="GitHub Steps Introduction">
To fix an issue on GitHub using OpenDevin, send a prompt to OpenDevin asking it to follow
steps like the following:
<ol>
<li>Read the issue https://github.com/OpenDevin/OpenDevin/issues/1611</li>
<li>Clone the repository and check out a new branch</li>
<li>Based on the instructions in the issue description, modify files to fix the issue</li>
<li>Push the resulting output to GitHub using the GITHUB_TOKEN environment variable</li>
<li>Tell me the link that I need to go to to send a pull request</li>
</ol>
</Translate>
<ol>
<li><Translate id="faq.section.github.step1" description="GitHub Step 1">Read the issue https://github.com/OpenDevin/OpenDevin/issues/1611</Translate></li>
<li><Translate id="faq.section.github.step2" description="GitHub Step 2">Clone the repository and check out a new branch</Translate></li>
<li><Translate id="faq.section.github.step3" description="GitHub Step 3">Based on the instructions in the issue description, modify files to fix the issue</Translate></li>
<li><Translate id="faq.section.github.step4" description="GitHub Step 4">Push the resulting output to GitHub using the GITHUB_TOKEN environment variable</Translate></li>
<li><Translate id="faq.section.github.step5" description="GitHub Step 5">Tell me the link that I need to go to to send a pull request</Translate></li>
</ol>
<Translate id="faq.section.github.steps.preRun" description="GitHub Steps Pre-Run">
Before you run OpenDevin, you can do:
<div className="command-box">
export SANDBOX_ENV_GITHUB_TOKEN=XXX
</div>
where XXX is a GitHub token that you created that has permissions to push to the OpenDevin repo. If you dont have write permission to the OpenDevin repo, you might need to change that to:
<div className="command-box">
Push the resulting output to my fork at https://github.com/USERNAME/OpenDevin/ using the GITHUB_TOKEN environment variable
</div>
where USERNAME is your GitHub username.
</Translate>
<div className="command-box">
export SANDBOX_ENV_GITHUB_TOKEN=XXX
</div>
<Translate id="faq.section.github.steps.tokenInfo" description="GitHub Steps Token Info">
where XXX is a GitHub token that you created that has permissions to push to the OpenDevin repo. If you dont have write permission to the OpenDevin repo, you might need to change that to:
</Translate>
<div className="command-box">
Push the resulting output to my fork at https://github.com/USERNAME/OpenDevin/ using the GITHUB_TOKEN environment variable
</div>
<Translate id="faq.section.github.steps.usernameInfo" description="GitHub Steps Username Info">
where USERNAME is your GitHub username.
</Translate>
</div>
<div className="faq-section">
<div className="faq-section-title">How is OpenDevin different from Devin?</div>
<p>
<a href="https://www.cognition.ai/blog/introducing-devin">Devin</a>&nbsp;
</div>
<div className="faq-section">
<div className="faq-section-title">
<Translate id="faq.section.title.4" description="Devin Section Title">How is OpenDevin different from Devin?</Translate>
</div>
<p>
<a href="https://www.cognition.ai/blog/introducing-devin"><Translate id="faq.section.devin.linkText" description="Devin Link Text">Devin</Translate></a>&nbsp;
<Translate id="faq.section.devin.description" description="Devin Description">
is a commercial product by Cognition Inc., that served as the initial
inspiration for OpenDevin. They both aim to do a good job at solving software
engineering tasks, but OpenDevin you can download, use, and modify, while Devin
you can only use through the Cognition site. In addition, OpenDevin has evolved
beyond the initial inspiration, and now serves as a community-driven ecosystem for
agent development in general, and we'd love to have you join and
<a href="https://github.com/OpenDevin/OpenDevin/blob/main/CONTRIBUTING.md">contribute</a>!
</p>
</Translate>
<a href="https://github.com/OpenDevin/OpenDevin/blob/main/CONTRIBUTING.md"><Translate id="faq.section.devin.contribute" description="Contribute Link">contribute</Translate></a>!
</p>
</div>
<div className="faq-section">
<div className="faq-section-title">
<Translate id="faq.section.title.5" description="ChatGPT Section Title">How is OpenDevin different from ChatGPT?</Translate>
</div>
<div className="faq-section">
<div className="faq-section-title">How is OpenDevin different from ChatGPT?</div>
<p>
<p>
<Translate id="faq.section.chatgpt.description" description="ChatGPT Description">
ChatGPT you can access online, it does not interface with local files, and
its ability to execute code is limited. So it can write code, but it is not
easy to test or execute it.
</p>
</div>
</Translate>
</p>
</div>
</Layout>
</>
</div>
</Layout>
);
}

View File

@ -2,6 +2,7 @@ import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
import Layout from "@theme/Layout";
import { HomepageHeader } from "../components/HomepageHeader/HomepageHeader";
import { Welcome } from "../components/Welcome/Welcome";
import { translate } from '@docusaurus/Translate';
export function Header({ title, summary, description }): JSX.Element {
return (
@ -19,7 +20,11 @@ export default function Home(): JSX.Element {
<>
<Layout
title={`${siteConfig.title}`}
description="AI-powered code generation for software engineering."
description={translate({
id: 'homepage.description',
message: 'AI-powered code generation for software engineering.',
description: 'The homepage description',
})}
>
<div>
<HomepageHeader />