fix deployement script

This commit is contained in:
martin legrand 2025-04-17 12:05:23 +02:00
parent 3d1f42351f
commit 36b26b43c9
8 changed files with 80 additions and 26 deletions

View File

@ -27,10 +27,13 @@ RUN pip install --no-cache-dir -r requirements.txt
COPY api.py .
COPY sources/ ./sources/
COPY prompts/ ./prompts/
COPY crx/ crx/
COPY llm_router/ llm_router/
COPY .env .
COPY config.ini .
# Expose port
EXPOSE 8000
# Run the application
CMD ["uvicorn", "api:api", "--host", "0.0.0.0", "--port", "8000"]
CMD ["python3", "api.py"]

View File

@ -439,11 +439,14 @@ https://googlechromelabs.github.io/chrome-for-testing/
## FAQ
**Q我需要什么的硬体配备**
**Q我需要什么的硬体配备?**
7B 型号:具有 8GB VRAM 的 GPU。
14B 型号12GB GPU例如 RTX 3060
32B 型号24GB+ VRAM。
| 模型大小 | GPU | 说明 |
|-----------|--------|-----------------------------------------------------------|
| 7B | 8GB VRAM | ⚠️ 不推荐。性能较差,容易出现幻觉,规划代理可能会失败。 |
| 14B | 12GB VRAM例如 RTX 3060 | ✅ 可用于简单任务。可能在网页浏览和规划任务上表现较弱。 |
| 32B | 24GB+ VRAM例如 RTX 4090 | 🚀 能完成大多数任务,但在任务规划上可能仍有困难。 |
| 70B+ | 48GB+ VRAM例如 Mac Studio | 💪 表现优秀。推荐用于高级用例。 |
**Q为什么选择 Deepseek R1 而不是其他模型?**

View File

@ -383,13 +383,14 @@ Et téléchargez la version de chromedriver correspondant à votre système d
Si cette section est incomplète, merci de faire une nouvelle issue sur github.
## FAQ
**Q: Quel matériel est nécessaire ?**
**Q: J'ai besoin d'un gros PC?**
ça dépend du modèle!
Pour un modèle 7B : GPU avec 8 Go de VRAM.
Pour un modèle 14B : GPU 12 Go (par exemple, RTX 3060).
Et un modèle 32B : 24 Go+ de VRAM.
| Taille du Modèle | GPU | Commentaire |
|--------------------|------|----------------------------------------------------------|
| 7B | 8 Go VRAM | ⚠️ Non recommandé. Performances médiocres, hallucinations fréquentes, et l'agent planificateur échouera probablement. |
| 14B | 12 Go VRAM (par ex. RTX 3060) | ✅ Utilisable pour des tâches simples. Peut rencontrer des difficultés avec la navigation web et les tâches de planification. |
| 32B | 24+ Go VRAM (par ex. RTX 4090) | 🚀 Réussite avec la plupart des tâches, peut encore avoir des difficultés avec la planification des tâches. |
| 70B+ | 48+ Go VRAM (par ex. Mac Studio) | 💪 Excellent. Recommandé pour des cas d'utilisation avancés. |
**Q: Pourquoi deepseek et pas un autre modèle**

16
api.py
View File

@ -24,14 +24,14 @@ from concurrent.futures import ThreadPoolExecutor
from celery import Celery
app = FastAPI(title="AgenticSeek API", version="0.1.0")
api = FastAPI(title="AgenticSeek API", version="0.1.0")
celery_app = Celery("tasks", broker="redis://localhost:6379/0", backend="redis://localhost:6379/0")
celery_app.conf.update(task_track_started=True)
logger = Logger("backend.log")
config = configparser.ConfigParser()
config.read('config.ini')
app.add_middleware(
api.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
@ -41,7 +41,7 @@ app.add_middleware(
if not os.path.exists(".screenshots"):
os.makedirs(".screenshots")
app.mount("/screenshots", StaticFiles(directory=".screenshots"), name="screenshots")
api.mount("/screenshots", StaticFiles(directory=".screenshots"), name="screenshots")
executor = ThreadPoolExecutor(max_workers=1)
@ -106,7 +106,7 @@ def initialize_system():
interaction = initialize_system()
is_generating = False
@app.get("/screenshot")
@api.get("/screenshot")
async def get_screenshot():
logger.info("Screenshot endpoint called")
screenshot_path = ".screenshots/updated_screen.png"
@ -118,12 +118,12 @@ async def get_screenshot():
content={"error": "No screenshot available"}
)
@app.get("/health")
@api.get("/health")
async def health_check():
logger.info("Health check endpoint called")
return {"status": "healthy", "version": "0.1.0"}
@app.get("/is_active")
@api.get("/is_active")
async def is_active():
logger.info("Is active endpoint called")
return {"is_active": interaction.is_active}
@ -146,7 +146,7 @@ def think_wrapper(interaction, query, tts_enabled):
interaction.last_success = False
raise e
@app.post("/query", response_model=QueryResponse)
@api.post("/query", response_model=QueryResponse)
async def process_query(request: QueryRequest):
global is_generating
logger.info(f"Processing query: {request.query}")
@ -199,4 +199,4 @@ async def process_query(request: QueryRequest):
interaction.save_session()
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
uvicorn.run(api, host="0.0.0.0", port=8000)

View File

@ -61,13 +61,54 @@ services:
- ./screenshots:/app/screenshots
environment:
- NODE_ENV=development
- CHOKIDAR_USEPOLLING=true # Ensure file watching works in Docker
- BACKEND_URL=http://host.docker.internal:8000
- CHOKIDAR_USEPOLLING=true
- BACKEND_URL=http://backend:8000
networks:
- agentic-seek-net
backend:
container_name: backend
build:
context: ./
dockerfile: Dockerfile.backend
stdin_open: true
tty: true
shm_size: 6g
ports:
- "8000:8000"
volumes:
- ./:/app
#network_mode: host
environment:
- NODE_ENV=development
- REDIS_URL=redis://redis:6379/0
- SEARXNG_URL=http://searxng:8080
- OLLAMA_URL=http://localhost:11434
- LM_STUDIO_URL=http://localhost:1234
extra_hosts:
- "host.docker.internal:host-gateway"
depends_on:
- redis
- searxng
- selenium
networks:
- agentic-seek-net
selenium:
image: selenium/standalone-chrome
platform: linux/amd64
shm_size: 2g
volumes:
- /dev/shm:/dev/shm
- chrome_profiles:/tmp/chrome
ports:
- 4444:4444
networks:
- agentic-seek-net
volumes:
redis-data:
chrome_profiles:
networks:
agentic-seek-net:

View File

@ -7,7 +7,7 @@ COPY agentic-seek-front/package.json agentic-seek-front/package-lock.json ./
RUN npm install
# Copy application code
COPY .agentic-seek-front/ .
COPY agentic-seek-front/ .
# Expose port
EXPOSE 3000

View File

@ -19,7 +19,7 @@ function App() {
const checkHealth = async () => {
try {
await axios.get('http://0.0.0.0:8000/health');
await axios.get('http://backend:8000/health');
setIsOnline(true);
console.log('System is online');
} catch {
@ -39,7 +39,7 @@ function App() {
const fetchScreenshot = async () => {
try {
const timestamp = new Date().getTime();
const res = await axios.get(`http://0.0.0.0:8000/screenshots/updated_screen.png?timestamp=${timestamp}`, {
const res = await axios.get(`http://backend:8000/screenshots/updated_screen.png?timestamp=${timestamp}`, {
responseType: 'blob'
});
if (isMounted) {
@ -94,7 +94,7 @@ function App() {
try {
console.log('Sending query:', query);
const res = await axios.post('http://0.0.0.0:8000/query', {
const res = await axios.post('http://backend:8000/query', {
query,
tts_enabled: false
});

View File

@ -95,7 +95,7 @@ server:
# If your instance owns a /etc/searxng/settings.yml file, then set the following
# values there.
secret_key: "a0f32049a2301f36ef012b9b7ef62733b4af1379a1d28d5c33d92cea37288182" # Is overwritten by ${SEARXNG_SECRET}
secret_key: "1234bbd68b6c51ff0b9ccb77e39b1f20a3178b63e71496cbc89ef019f0341382" # Is overwritten by ${SEARXNG_SECRET}
# Proxy image results through SearXNG. Is overwritten by ${SEARXNG_IMAGE_PROXY}
image_proxy: false
# 1.0 and 1.1 are supported
@ -2642,6 +2642,12 @@ engines:
shortcut: pgo
disabled: true
- name: senscritique
engine: senscritique
shortcut: scr
timeout: 4.0
disabled: true
# Doku engine lets you access to any Doku wiki instance:
# A public one or a privete/corporate one.
# - name: ubuntuwiki