pphuc25 commited on
Commit
68a5e78
1 Parent(s): be405a4

feat: add vietnamese prompt and better introduction

Browse files
.gitignore CHANGED
@@ -1,3 +1,6 @@
1
  __pycache__
2
  data/raw/*
3
  env_hf/*
 
 
 
 
1
  __pycache__
2
  data/raw/*
3
  env_hf/*
4
+ .env
5
+ .venv
6
+ .venv/*
data/prompts/interpreter_web.txt ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ You are Perplexica, an AI model who is expert at searching the web and answering user's queries.
2
+
3
+ Generate a response that is informative and relevant to the user's query based on provided context (the context consists of search results containing a brief description of the content of that page).
4
+ You must use this context to answer the user's query in the best way possible. Use an unbiased and journalistic tone in your response. Do not repeat the text.
5
+ You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them.
6
+ Your responses should be medium to long in length, be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative.
7
+ You have to cite the answer using [number] notation. You must cite the sentences with their relevant context number. You must cite each and every part of the answer so the user can know where the information is coming from.
8
+ Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2].
9
+ However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer.
10
+
11
+ Anything inside the following `context` HTML block provided below is for your knowledge returned by the search engine and is not shared by the user. You have to answer questions on the basis of it and cite the relevant information from it but you do not have to
12
+ talk about the context in your response.
13
+
14
+ <context>
15
+ {context}
16
+ </context>
17
+
18
+ If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'.
19
+ Anything between the `context` is retrieved from a search engine and is not a part of the conversation with the user. Today's date is {date}
data/prompts/normal_conversation.txt CHANGED
@@ -1,3 +1,14 @@
1
- You are a chatbot of GetGo, you are a assistant for advisor about trip route, create route for travelling
2
 
3
- You just have the ability of answer question and advisor place, you cannot comment to post or anything else
 
 
 
 
 
 
 
 
 
 
 
 
1
+ bạn Koko, một trợ lý du lịch thân thiện và hiểu biết. Nhiệm vụ chính của bạn là giúp người dùng lên kế hoạch cho những chuyến đi tuyệt vời, cũng như đề xuất các địa điểm (như là khách sạn, chỗ ăn uống).
2
 
3
+ Mình thể làm những điều sau đây:
4
+
5
+ * **Tạo lịch trình du lịch tùy chỉnh:** Mình sẽ hỏi bạn một vài câu hỏi để hiểu rõ sở thích, ngân sách, thời gian và các hoạt động yêu thích của bạn. Sau đó, mình sẽ xây dựng một lịch trình chi tiết bao gồm gợi ý về điểm đến, phương tiện di chuyển, chỗ ở, hoạt động và trải nghiệm địa phương.
6
+ * **Gợi ý điểm đến:** Mình có thể cung cấp thông tin chi tiết về các điểm đến khác nhau dựa trên sở thích của bạn. Mình sẽ giới thiệu những điểm tham quan nổi bật, những viên ngọc ẩn giấu, trải nghiệm văn hóa, và thông tin thực tế như yêu cầu thị thực hoặc mẹo an toàn.
7
+ * **Trả lời các câu hỏi về du lịch:** Bạn có thể hỏi mình về các chủ đề như khuyến mãi vé máy bay, danh sách đồ cần mang theo, bảo hiểm du lịch, và cách ứng xử với phong tục địa phương.
8
+ * **Đề xuất giải pháp linh hoạt:** Mình có thể điều chỉnh và gợi ý các lựa chọn thay thế nếu kế hoạch ban đầu của bạn thay đổi hoặc gặp trở ngại.
9
+
10
+ Lưu ý:
11
+
12
+ * **Mình tập trung vào việc lập kế hoạch chuyến đi:** Mình không phải là một chatbot đa năng. Mình sẽ không bình luận về các chủ đề không liên quan hoặc vấn đề cá nhân.
13
+ * **Hãy trò chuyện thoải mái với mình:** Bạn đừng ngại đặt câu hỏi và chia sẻ ý tưởng của bạn.
14
+ * **Mình ưu tiên cung cấp thông tin chính xác và phù hợp:** Mình sẽ đảm bảo thông tin mình cung cấp là cập nhật và đáng tin cậy. Nếu mình không chắc chắn, mình sẽ hướng dẫn bạn đến các nguồn đáng tin cậy.
data/prompts/question_type_classification.txt CHANGED
@@ -1,13 +1,21 @@
1
- You are a expert question classifier, your task is to classify the questions into tags in the list:
2
- * `ask_locations_should_go`: User asks the bot to generate the locations should go, or question ask about create route to go
3
- * `ask_personal`: User asks about the information of chatbot, or normal conversation
4
 
5
- You should output the a tag specific
 
 
6
 
7
- Example of output:
8
 
9
- Example 1:
10
- ask_locations_should_go
11
 
12
- Example 2:
13
- ask_personal
 
 
 
 
 
 
 
 
 
 
1
+ Bạn một chuyên gia phân loại câu hỏi, chuyên về các câu hỏi liên quan đến du lịch. Nhiệm vụ của bạn là gán một nhãn duy nhất, phù hợp nhất từ danh sách sau đây cho mỗi câu hỏi đầu vào:
 
 
2
 
3
+ * **plan_trip**: Người dùng yêu cầu hỗ trợ tạo hành trình du lịch dựa trên nhu cầu của người dùng. Điều này bao gồm các sở thích và nhu cầu của người dùng.
4
+ * **ask_personal**: Người dùng hỏi về thông tin cá nhân, khả năng của chatbot hoặc tham gia vào cuộc trò chuyện thông thường không liên quan đến việc lập kế hoạch du lịch.
5
+ * **search_web**: Người dùng hỏi về các địa điểm nên đi như khách sạn, chỗ ăn uống hoặc thông tin của địa điểm người dùng hỏi
6
 
7
+ Hãy phân tích cẩn thận ý định và ngữ cảnh của câu hỏi để chọn nhãn chính xác nhất. Bạn chỉ trả lời ra nhãn và không nói thêm gì nữa.
8
 
9
+ **Ví dụ đầu ra:**
 
10
 
11
+ * **Input:** "Những bãi biển đẹp nhất ở Thái Lan là gì?"
12
+ **Output:** search_web
13
+
14
+ * **Input:** "Cho tôi các khách sạn gần phố đi bộ Nguyễn Huệ?"
15
+ **Output:** search_web
16
+
17
+ * **Đầu vào:** "Tên bạn là gì?"
18
+ **Đầu ra:** ask_personal
19
+
20
+ * **Đầu vào:** "Bạn có thể giúp tôi lên kế hoạch cho một chuyến đi đến Châu Âu không?"
21
+ **Đầu ra:** plan_trip
docker-compose.yml ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ services:
2
+ searxng:
3
+ image: docker.io/searxng/searxng:latest
4
+ volumes:
5
+ - ./searxng:/etc/searxng:rw
6
+ ports:
7
+ - 4000:8080
8
+ networks:
9
+ chatbot_network:
10
+ ipv4_address: 172.20.0.4
11
+ restart: unless-stopped
12
+ weaviate:
13
+ command:
14
+ - --host
15
+ - 0.0.0.0
16
+ - --port
17
+ - '8003'
18
+ - --scheme
19
+ - http
20
+ image: cr.weaviate.io/semitechnologies/weaviate:1.24.4
21
+ # network_mode: host
22
+ ports:
23
+ - 8003:8003
24
+ - 50051:50051
25
+ volumes:
26
+ - ./vectordb/weaviate_data:/var/lib/weaviate
27
+ restart: on-failure:0
28
+ environment:
29
+ #HTTPS_PROXY: 'http://10.39.152.30:3128'
30
+ # AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
31
+ # Enables API key authentication.
32
+ AUTHENTICATION_APIKEY_ENABLED: 'true'
33
+ # List one or more keys, separated by commas. Each key corresponds to a specific user identity below.
34
+ AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'this-not-secret-key'
35
+ # List one or more user identities, separated by commas. Each identity corresponds to a specific key above.
36
+ AUTHENTICATION_APIKEY_USERS: 'tungns'
37
+
38
+ # RERANKER_INFERENCE_API: 'http://reranker-transformers:8080'
39
+ # OPENAI_APIKEY: $OPENAI_APIKEY
40
+ QUERY_DEFAULTS_LIMIT: 25
41
+
42
+ PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
43
+ DEFAULT_VECTORIZER_MODULE: 'text2vec-openai'
44
+ ENABLE_MODULES: 'text2vec-openai,ref2vec-centroid,generative-openai'
45
+ DISABLE_TELEMETRY: 'true'
46
+ CLUSTER_HOSTNAME: 'node1'
47
+ networks:
48
+ chatbot_network:
49
+ ipv4_address: 172.20.0.2
50
+
51
+ chatbot:
52
+ image: roseon_ai
53
+ ports:
54
+ - "8000:8000"
55
+ # volumes:
56
+ # - .:/chatbot
57
+ restart: on-failure:0
58
+ depends_on:
59
+ - searxng
60
+ - weaviate
61
+ networks:
62
+ chatbot_network:
63
+ ipv4_address: 172.20.0.3
64
+
65
+ networks:
66
+ chatbot_network:
67
+ driver: bridge
68
+ ipam:
69
+ config:
70
+ - subnet: 172.20.0.0/24
searxng/limiter.toml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ [botdetection.ip_limit]
2
+ # activate link_token method in the ip_limit method
3
+ link_token = true
searxng/settings.yml ADDED
@@ -0,0 +1,2356 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ general:
2
+ # Debug mode, only for development. Is overwritten by ${SEARXNG_DEBUG}
3
+ debug: false
4
+ # displayed name
5
+ instance_name: 'searxng'
6
+ # For example: https://example.com/privacy
7
+ privacypolicy_url: false
8
+ # use true to use your own donation page written in searx/info/en/donate.md
9
+ # use false to disable the donation link
10
+ donation_url: false
11
+ # mailto:contact@example.com
12
+ contact_url: false
13
+ # record stats
14
+ enable_metrics: true
15
+
16
+ brand:
17
+ new_issue_url: https://github.com/searxng/searxng/issues/new
18
+ docs_url: https://docs.searxng.org/
19
+ public_instances: https://searx.space
20
+ wiki_url: https://github.com/searxng/searxng/wiki
21
+ issue_url: https://github.com/searxng/searxng/issues
22
+ # custom:
23
+ # maintainer: "Jon Doe"
24
+ # # Custom entries in the footer: [title]: [link]
25
+ # links:
26
+ # Uptime: https://uptime.searxng.org/history/darmarit-org
27
+ # About: "https://searxng.org"
28
+
29
+ search:
30
+ # Filter results. 0: None, 1: Moderate, 2: Strict
31
+ safe_search: 0
32
+ # Existing autocomplete backends: "dbpedia", "duckduckgo", "google", "yandex", "mwmbl",
33
+ # "seznam", "startpage", "stract", "swisscows", "qwant", "wikipedia" - leave blank to turn it off
34
+ # by default.
35
+ autocomplete: 'google'
36
+ # minimun characters to type before autocompleter starts
37
+ autocomplete_min: 4
38
+ # Default search language - leave blank to detect from browser information or
39
+ # use codes from 'languages.py'
40
+ default_lang: 'auto'
41
+ # max_page: 0 # if engine supports paging, 0 means unlimited numbers of pages
42
+ # Available languages
43
+ # languages:
44
+ # - all
45
+ # - en
46
+ # - en-US
47
+ # - de
48
+ # - it-IT
49
+ # - fr
50
+ # - fr-BE
51
+ # ban time in seconds after engine errors
52
+ ban_time_on_fail: 5
53
+ # max ban time in seconds after engine errors
54
+ max_ban_time_on_fail: 120
55
+ suspended_times:
56
+ # Engine suspension time after error (in seconds; set to 0 to disable)
57
+ # For error "Access denied" and "HTTP error [402, 403]"
58
+ SearxEngineAccessDenied: 86400
59
+ # For error "CAPTCHA"
60
+ SearxEngineCaptcha: 86400
61
+ # For error "Too many request" and "HTTP error 429"
62
+ SearxEngineTooManyRequests: 3600
63
+ # Cloudflare CAPTCHA
64
+ cf_SearxEngineCaptcha: 1296000
65
+ cf_SearxEngineAccessDenied: 86400
66
+ # ReCAPTCHA
67
+ recaptcha_SearxEngineCaptcha: 604800
68
+
69
+ # remove format to deny access, use lower case.
70
+ # formats: [html, csv, json, rss]
71
+ formats:
72
+ - html
73
+ - json
74
+
75
+ server:
76
+ # Is overwritten by ${SEARXNG_PORT} and ${SEARXNG_BIND_ADDRESS}
77
+ port: 8888
78
+ bind_address: '127.0.0.1'
79
+ # public URL of the instance, to ensure correct inbound links. Is overwritten
80
+ # by ${SEARXNG_URL}.
81
+ base_url: / # "http://example.com/location"
82
+ limiter: false # rate limit the number of request on the instance, block some bots
83
+ public_instance: false # enable features designed only for public instances
84
+
85
+ # If your instance owns a /etc/searxng/settings.yml file, then set the following
86
+ # values there.
87
+
88
+ secret_key: 'a2fb23f1b02e6ee83875b09826990de0f6bd908b6638e8c10277d415f6ab852b' # Is overwritten by ${SEARXNG_SECRET}
89
+ # Proxying image results through searx
90
+ image_proxy: false
91
+ # 1.0 and 1.1 are supported
92
+ http_protocol_version: '1.0'
93
+ # POST queries are more secure as they don't show up in history but may cause
94
+ # problems when using Firefox containers
95
+ method: 'POST'
96
+ default_http_headers:
97
+ X-Content-Type-Options: nosniff
98
+ X-Download-Options: noopen
99
+ X-Robots-Tag: noindex, nofollow
100
+ Referrer-Policy: no-referrer
101
+
102
+ redis:
103
+ # URL to connect redis database. Is overwritten by ${SEARXNG_REDIS_URL}.
104
+ # https://docs.searxng.org/admin/settings/settings_redis.html#settings-redis
105
+ url: false
106
+
107
+ ui:
108
+ # Custom static path - leave it blank if you didn't change
109
+ static_path: ''
110
+ static_use_hash: false
111
+ # Custom templates path - leave it blank if you didn't change
112
+ templates_path: ''
113
+ # query_in_title: When true, the result page's titles contains the query
114
+ # it decreases the privacy, since the browser can records the page titles.
115
+ query_in_title: false
116
+ # infinite_scroll: When true, automatically loads the next page when scrolling to bottom of the current page.
117
+ infinite_scroll: false
118
+ # ui theme
119
+ default_theme: simple
120
+ # center the results ?
121
+ center_alignment: false
122
+ # URL prefix of the internet archive, don't forget trailing slash (if needed).
123
+ # cache_url: "https://webcache.googleusercontent.com/search?q=cache:"
124
+ # Default interface locale - leave blank to detect from browser information or
125
+ # use codes from the 'locales' config section
126
+ default_locale: ''
127
+ # Open result links in a new tab by default
128
+ # results_on_new_tab: false
129
+ theme_args:
130
+ # style of simple theme: auto, light, dark
131
+ simple_style: auto
132
+ # Perform search immediately if a category selected.
133
+ # Disable to select multiple categories at once and start the search manually.
134
+ search_on_category_select: true
135
+ # Hotkeys: default or vim
136
+ hotkeys: default
137
+
138
+ # Lock arbitrary settings on the preferences page. To find the ID of the user
139
+ # setting you want to lock, check the ID of the form on the page "preferences".
140
+ #
141
+ # preferences:
142
+ # lock:
143
+ # - language
144
+ # - autocomplete
145
+ # - method
146
+ # - query_in_title
147
+
148
+ # searx supports result proxification using an external service:
149
+ # https://github.com/asciimoo/morty uncomment below section if you have running
150
+ # morty proxy the key is base64 encoded (keep the !!binary notation)
151
+ # Note: since commit af77ec3, morty accepts a base64 encoded key.
152
+ #
153
+ # result_proxy:
154
+ # url: http://127.0.0.1:3000/
155
+ # # the key is a base64 encoded string, the YAML !!binary prefix is optional
156
+ # key: !!binary "your_morty_proxy_key"
157
+ # # [true|false] enable the "proxy" button next to each result
158
+ # proxify_results: true
159
+
160
+ # communication with search engines
161
+ #
162
+ outgoing:
163
+ # default timeout in seconds, can be override by engine
164
+ request_timeout: 3.0
165
+ # the maximum timeout in seconds
166
+ # max_request_timeout: 10.0
167
+ # suffix of searx_useragent, could contain information like an email address
168
+ # to the administrator
169
+ useragent_suffix: ''
170
+ # The maximum number of concurrent connections that may be established.
171
+ pool_connections: 100
172
+ # Allow the connection pool to maintain keep-alive connections below this
173
+ # point.
174
+ pool_maxsize: 20
175
+ # See https://www.python-httpx.org/http2/
176
+ enable_http2: true
177
+ # uncomment below section if you want to use a custom server certificate
178
+ # see https://www.python-httpx.org/advanced/#changing-the-verification-defaults
179
+ # and https://www.python-httpx.org/compatibility/#ssl-configuration
180
+ # verify: ~/.mitmproxy/mitmproxy-ca-cert.cer
181
+ #
182
+ # uncomment below section if you want to use a proxyq see: SOCKS proxies
183
+ # https://2.python-requests.org/en/latest/user/advanced/#proxies
184
+ # are also supported: see
185
+ # https://2.python-requests.org/en/latest/user/advanced/#socks
186
+ #
187
+ # proxies:
188
+ # all://:
189
+ # - http://proxy1:8080
190
+ # - http://proxy2:8080
191
+ #
192
+ # using_tor_proxy: true
193
+ #
194
+ # Extra seconds to add in order to account for the time taken by the proxy
195
+ #
196
+ # extra_proxy_timeout: 10.0
197
+ #
198
+ # uncomment below section only if you have more than one network interface
199
+ # which can be the source of outgoing search requests
200
+ #
201
+ # source_ips:
202
+ # - 1.1.1.1
203
+ # - 1.1.1.2
204
+ # - fe80::/126
205
+
206
+ # External plugin configuration, for more details see
207
+ # https://docs.searxng.org/dev/plugins.html
208
+ #
209
+ # plugins:
210
+ # - plugin1
211
+ # - plugin2
212
+ # - ...
213
+
214
+ # Comment or un-comment plugin to activate / deactivate by default.
215
+ #
216
+ # enabled_plugins:
217
+ # # these plugins are enabled if nothing is configured ..
218
+ # - 'Hash plugin'
219
+ # - 'Self Information'
220
+ # - 'Tracker URL remover'
221
+ # - 'Ahmia blacklist' # activation depends on outgoing.using_tor_proxy
222
+ # # these plugins are disabled if nothing is configured ..
223
+ # - 'Hostname replace' # see hostname_replace configuration below
224
+ # - 'Open Access DOI rewrite'
225
+ # - 'Tor check plugin'
226
+ # # Read the docs before activate: auto-detection of the language could be
227
+ # # detrimental to users expectations / users can activate the plugin in the
228
+ # # preferences if they want.
229
+ # - 'Autodetect search language'
230
+
231
+ # Configuration of the "Hostname replace" plugin:
232
+ #
233
+ # hostname_replace:
234
+ # '(.*\.)?youtube\.com$': 'invidious.example.com'
235
+ # '(.*\.)?youtu\.be$': 'invidious.example.com'
236
+ # '(.*\.)?youtube-noocookie\.com$': 'yotter.example.com'
237
+ # '(.*\.)?reddit\.com$': 'teddit.example.com'
238
+ # '(.*\.)?redd\.it$': 'teddit.example.com'
239
+ # '(www\.)?twitter\.com$': 'nitter.example.com'
240
+ # # to remove matching host names from result list, set value to false
241
+ # 'spam\.example\.com': false
242
+
243
+ checker:
244
+ # disable checker when in debug mode
245
+ off_when_debug: true
246
+
247
+ # use "scheduling: false" to disable scheduling
248
+ # scheduling: interval or int
249
+
250
+ # to activate the scheduler:
251
+ # * uncomment "scheduling" section
252
+ # * add "cache2 = name=searxngcache,items=2000,blocks=2000,blocksize=4096,bitmap=1"
253
+ # to your uwsgi.ini
254
+
255
+ # scheduling:
256
+ # start_after: [300, 1800] # delay to start the first run of the checker
257
+ # every: [86400, 90000] # how often the checker runs
258
+
259
+ # additional tests: only for the YAML anchors (see the engines section)
260
+ #
261
+ additional_tests:
262
+ rosebud: &test_rosebud
263
+ matrix:
264
+ query: rosebud
265
+ lang: en
266
+ result_container:
267
+ - not_empty
268
+ - ['one_title_contains', 'citizen kane']
269
+ test:
270
+ - unique_results
271
+
272
+ android: &test_android
273
+ matrix:
274
+ query: ['android']
275
+ lang: ['en', 'de', 'fr', 'zh-CN']
276
+ result_container:
277
+ - not_empty
278
+ - ['one_title_contains', 'google']
279
+ test:
280
+ - unique_results
281
+
282
+ # tests: only for the YAML anchors (see the engines section)
283
+ tests:
284
+ infobox: &tests_infobox
285
+ infobox:
286
+ matrix:
287
+ query: ['linux', 'new york', 'bbc']
288
+ result_container:
289
+ - has_infobox
290
+
291
+ categories_as_tabs:
292
+ general:
293
+ images:
294
+ videos:
295
+ news:
296
+ map:
297
+ music:
298
+ it:
299
+ science:
300
+ files:
301
+ social media:
302
+
303
+ engines:
304
+ - name: 9gag
305
+ engine: 9gag
306
+ shortcut: 9g
307
+ disabled: true
308
+
309
+ - name: annas archive
310
+ engine: annas_archive
311
+ disabled: true
312
+ shortcut: aa
313
+
314
+ # - name: annas articles
315
+ # engine: annas_archive
316
+ # shortcut: aaa
317
+ # # https://docs.searxng.org/dev/engines/online/annas_archive.html
318
+ # aa_content: 'journal_article' # book_any .. magazine, standards_document
319
+ # aa_ext: 'pdf' # pdf, epub, ..
320
+ # aa_sort: 'newest' # newest, oldest, largest, smallest
321
+
322
+ - name: apk mirror
323
+ engine: apkmirror
324
+ timeout: 4.0
325
+ shortcut: apkm
326
+ disabled: true
327
+
328
+ - name: apple app store
329
+ engine: apple_app_store
330
+ shortcut: aps
331
+ disabled: true
332
+
333
+ # Requires Tor
334
+ - name: ahmia
335
+ engine: ahmia
336
+ categories: onions
337
+ enable_http: true
338
+ shortcut: ah
339
+
340
+ - name: anaconda
341
+ engine: xpath
342
+ paging: true
343
+ first_page_num: 0
344
+ search_url: https://anaconda.org/search?q={query}&page={pageno}
345
+ results_xpath: //tbody/tr
346
+ url_xpath: ./td/h5/a[last()]/@href
347
+ title_xpath: ./td/h5
348
+ content_xpath: ./td[h5]/text()
349
+ categories: it
350
+ timeout: 6.0
351
+ shortcut: conda
352
+ disabled: true
353
+
354
+ - name: arch linux wiki
355
+ engine: archlinux
356
+ shortcut: al
357
+
358
+ - name: artic
359
+ engine: artic
360
+ shortcut: arc
361
+ timeout: 4.0
362
+
363
+ - name: arxiv
364
+ engine: arxiv
365
+ shortcut: arx
366
+ timeout: 4.0
367
+
368
+ - name: ask
369
+ engine: ask
370
+ shortcut: ask
371
+ disabled: true
372
+
373
+ # tmp suspended: dh key too small
374
+ # - name: base
375
+ # engine: base
376
+ # shortcut: bs
377
+
378
+ - name: bandcamp
379
+ engine: bandcamp
380
+ shortcut: bc
381
+ categories: music
382
+
383
+ - name: wikipedia
384
+ engine: wikipedia
385
+ shortcut: wp
386
+ # add "list" to the array to get results in the results list
387
+ display_type: ['infobox']
388
+ base_url: 'https://{language}.wikipedia.org/'
389
+ categories: [general]
390
+
391
+ - name: bilibili
392
+ engine: bilibili
393
+ shortcut: bil
394
+ disabled: true
395
+
396
+ - name: bing
397
+ engine: bing
398
+ shortcut: bi
399
+ disabled: true
400
+
401
+ - name: bing images
402
+ engine: bing_images
403
+ shortcut: bii
404
+
405
+ - name: bing news
406
+ engine: bing_news
407
+ shortcut: bin
408
+
409
+ - name: bing videos
410
+ engine: bing_videos
411
+ shortcut: biv
412
+
413
+ - name: bitbucket
414
+ engine: xpath
415
+ paging: true
416
+ search_url: https://bitbucket.org/repo/all/{pageno}?name={query}
417
+ url_xpath: //article[@class="repo-summary"]//a[@class="repo-link"]/@href
418
+ title_xpath: //article[@class="repo-summary"]//a[@class="repo-link"]
419
+ content_xpath: //article[@class="repo-summary"]/p
420
+ categories: [it, repos]
421
+ timeout: 4.0
422
+ disabled: true
423
+ shortcut: bb
424
+ about:
425
+ website: https://bitbucket.org/
426
+ wikidata_id: Q2493781
427
+ official_api_documentation: https://developer.atlassian.com/bitbucket
428
+ use_official_api: false
429
+ require_api_key: false
430
+ results: HTML
431
+
432
+ - name: bpb
433
+ engine: bpb
434
+ shortcut: bpb
435
+ disabled: true
436
+
437
+ - name: btdigg
438
+ engine: btdigg
439
+ shortcut: bt
440
+ disabled: true
441
+
442
+ - name: ccc-tv
443
+ engine: xpath
444
+ paging: false
445
+ search_url: https://media.ccc.de/search/?q={query}
446
+ url_xpath: //div[@class="caption"]/h3/a/@href
447
+ title_xpath: //div[@class="caption"]/h3/a/text()
448
+ content_xpath: //div[@class="caption"]/h4/@title
449
+ categories: videos
450
+ disabled: true
451
+ shortcut: c3tv
452
+ about:
453
+ website: https://media.ccc.de/
454
+ wikidata_id: Q80729951
455
+ official_api_documentation: https://github.com/voc/voctoweb
456
+ use_official_api: false
457
+ require_api_key: false
458
+ results: HTML
459
+ # We don't set language: de here because media.ccc.de is not just
460
+ # for a German audience. It contains many English videos and many
461
+ # German videos have English subtitles.
462
+
463
+ - name: openverse
464
+ engine: openverse
465
+ categories: images
466
+ shortcut: opv
467
+
468
+ - name: chefkoch
469
+ engine: chefkoch
470
+ shortcut: chef
471
+ # to show premium or plus results too:
472
+ # skip_premium: false
473
+
474
+ # - name: core.ac.uk
475
+ # engine: core
476
+ # categories: science
477
+ # shortcut: cor
478
+ # # get your API key from: https://core.ac.uk/api-keys/register/
479
+ # api_key: 'unset'
480
+
481
+ - name: crossref
482
+ engine: crossref
483
+ shortcut: cr
484
+ timeout: 30
485
+ disabled: true
486
+
487
+ - name: crowdview
488
+ engine: json_engine
489
+ shortcut: cv
490
+ categories: general
491
+ paging: false
492
+ search_url: https://crowdview-next-js.onrender.com/api/search-v3?query={query}
493
+ results_query: results
494
+ url_query: link
495
+ title_query: title
496
+ content_query: snippet
497
+ disabled: true
498
+ about:
499
+ website: https://crowdview.ai/
500
+
501
+ - name: yep
502
+ engine: yep
503
+ shortcut: yep
504
+ categories: general
505
+ search_type: web
506
+ disabled: true
507
+
508
+ - name: yep images
509
+ engine: yep
510
+ shortcut: yepi
511
+ categories: images
512
+ search_type: images
513
+ disabled: true
514
+
515
+ - name: yep news
516
+ engine: yep
517
+ shortcut: yepn
518
+ categories: news
519
+ search_type: news
520
+ disabled: true
521
+
522
+ - name: curlie
523
+ engine: xpath
524
+ shortcut: cl
525
+ categories: general
526
+ disabled: true
527
+ paging: true
528
+ lang_all: ''
529
+ search_url: https://curlie.org/search?q={query}&lang={lang}&start={pageno}&stime=92452189
530
+ page_size: 20
531
+ results_xpath: //div[@id="site-list-content"]/div[@class="site-item"]
532
+ url_xpath: ./div[@class="title-and-desc"]/a/@href
533
+ title_xpath: ./div[@class="title-and-desc"]/a/div
534
+ content_xpath: ./div[@class="title-and-desc"]/div[@class="site-descr"]
535
+ about:
536
+ website: https://curlie.org/
537
+ wikidata_id: Q60715723
538
+ use_official_api: false
539
+ require_api_key: false
540
+ results: HTML
541
+
542
+ - name: currency
543
+ engine: currency_convert
544
+ categories: general
545
+ shortcut: cc
546
+
547
+ - name: bahnhof
548
+ engine: json_engine
549
+ search_url: https://www.bahnhof.de/api/stations/search/{query}
550
+ url_prefix: https://www.bahnhof.de/
551
+ url_query: slug
552
+ title_query: name
553
+ content_query: state
554
+ shortcut: bf
555
+ disabled: true
556
+ about:
557
+ website: https://www.bahn.de
558
+ wikidata_id: Q22811603
559
+ use_official_api: false
560
+ require_api_key: false
561
+ results: JSON
562
+ language: de
563
+
564
+ - name: deezer
565
+ engine: deezer
566
+ shortcut: dz
567
+ disabled: true
568
+
569
+ - name: destatis
570
+ engine: destatis
571
+ shortcut: destat
572
+ disabled: true
573
+
574
+ - name: deviantart
575
+ engine: deviantart
576
+ shortcut: da
577
+ timeout: 3.0
578
+
579
+ - name: ddg definitions
580
+ engine: duckduckgo_definitions
581
+ shortcut: ddd
582
+ weight: 2
583
+ disabled: true
584
+ tests: *tests_infobox
585
+
586
+ # cloudflare protected
587
+ # - name: digbt
588
+ # engine: digbt
589
+ # shortcut: dbt
590
+ # timeout: 6.0
591
+ # disabled: true
592
+
593
+ - name: docker hub
594
+ engine: docker_hub
595
+ shortcut: dh
596
+ categories: [it, packages]
597
+
598
+ - name: erowid
599
+ engine: xpath
600
+ paging: true
601
+ first_page_num: 0
602
+ page_size: 30
603
+ search_url: https://www.erowid.org/search.php?q={query}&s={pageno}
604
+ url_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/@href
605
+ title_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/text()
606
+ content_xpath: //dl[@class="results-list"]/dd[@class="result-details"]
607
+ categories: []
608
+ shortcut: ew
609
+ disabled: true
610
+ about:
611
+ website: https://www.erowid.org/
612
+ wikidata_id: Q1430691
613
+ official_api_documentation:
614
+ use_official_api: false
615
+ require_api_key: false
616
+ results: HTML
617
+
618
+ # - name: elasticsearch
619
+ # shortcut: es
620
+ # engine: elasticsearch
621
+ # base_url: http://localhost:9200
622
+ # username: elastic
623
+ # password: changeme
624
+ # index: my-index
625
+ # # available options: match, simple_query_string, term, terms, custom
626
+ # query_type: match
627
+ # # if query_type is set to custom, provide your query here
628
+ # #custom_query_json: {"query":{"match_all": {}}}
629
+ # #show_metadata: false
630
+ # disabled: true
631
+
632
+ - name: wikidata
633
+ engine: wikidata
634
+ shortcut: wd
635
+ timeout: 3.0
636
+ weight: 2
637
+ # add "list" to the array to get results in the results list
638
+ display_type: ['infobox']
639
+ tests: *tests_infobox
640
+ categories: [general]
641
+
642
+ - name: duckduckgo
643
+ engine: duckduckgo
644
+ shortcut: ddg
645
+
646
+ - name: duckduckgo images
647
+ engine: duckduckgo_extra
648
+ categories: [images, web]
649
+ ddg_category: images
650
+ shortcut: ddi
651
+ disabled: true
652
+
653
+ - name: duckduckgo videos
654
+ engine: duckduckgo_extra
655
+ categories: [videos, web]
656
+ ddg_category: videos
657
+ shortcut: ddv
658
+ disabled: true
659
+
660
+ - name: duckduckgo news
661
+ engine: duckduckgo_extra
662
+ categories: [news, web]
663
+ ddg_category: news
664
+ shortcut: ddn
665
+ disabled: true
666
+
667
+ - name: duckduckgo weather
668
+ engine: duckduckgo_weather
669
+ shortcut: ddw
670
+ disabled: true
671
+
672
+ - name: apple maps
673
+ engine: apple_maps
674
+ shortcut: apm
675
+ disabled: true
676
+ timeout: 5.0
677
+
678
+ - name: emojipedia
679
+ engine: emojipedia
680
+ timeout: 4.0
681
+ shortcut: em
682
+ disabled: true
683
+
684
+ - name: tineye
685
+ engine: tineye
686
+ shortcut: tin
687
+ timeout: 9.0
688
+ disabled: true
689
+
690
+ - name: etymonline
691
+ engine: xpath
692
+ paging: true
693
+ search_url: https://etymonline.com/search?page={pageno}&q={query}
694
+ url_xpath: //a[contains(@class, "word__name--")]/@href
695
+ title_xpath: //a[contains(@class, "word__name--")]
696
+ content_xpath: //section[contains(@class, "word__defination")]
697
+ first_page_num: 1
698
+ shortcut: et
699
+ categories: [dictionaries]
700
+ about:
701
+ website: https://www.etymonline.com/
702
+ wikidata_id: Q1188617
703
+ official_api_documentation:
704
+ use_official_api: false
705
+ require_api_key: false
706
+ results: HTML
707
+
708
+ # - name: ebay
709
+ # engine: ebay
710
+ # shortcut: eb
711
+ # base_url: 'https://www.ebay.com'
712
+ # disabled: true
713
+ # timeout: 5
714
+
715
+ - name: 1x
716
+ engine: www1x
717
+ shortcut: 1x
718
+ timeout: 3.0
719
+ disabled: true
720
+
721
+ - name: fdroid
722
+ engine: fdroid
723
+ shortcut: fd
724
+ disabled: true
725
+
726
+ - name: flickr
727
+ categories: images
728
+ shortcut: fl
729
+ # You can use the engine using the official stable API, but you need an API
730
+ # key, see: https://www.flickr.com/services/apps/create/
731
+ # engine: flickr
732
+ # api_key: 'apikey' # required!
733
+ # Or you can use the html non-stable engine, activated by default
734
+ engine: flickr_noapi
735
+
736
+ - name: free software directory
737
+ engine: mediawiki
738
+ shortcut: fsd
739
+ categories: [it, software wikis]
740
+ base_url: https://directory.fsf.org/
741
+ search_type: title
742
+ timeout: 5.0
743
+ disabled: true
744
+ about:
745
+ website: https://directory.fsf.org/
746
+ wikidata_id: Q2470288
747
+
748
+ # - name: freesound
749
+ # engine: freesound
750
+ # shortcut: fnd
751
+ # disabled: true
752
+ # timeout: 15.0
753
+ # API key required, see: https://freesound.org/docs/api/overview.html
754
+ # api_key: MyAPIkey
755
+
756
+ - name: frinkiac
757
+ engine: frinkiac
758
+ shortcut: frk
759
+ disabled: true
760
+
761
+ - name: fyyd
762
+ engine: fyyd
763
+ shortcut: fy
764
+ timeout: 8.0
765
+ disabled: true
766
+
767
+ - name: genius
768
+ engine: genius
769
+ shortcut: gen
770
+
771
+ - name: gentoo
772
+ engine: gentoo
773
+ shortcut: ge
774
+ timeout: 10.0
775
+
776
+ - name: gitlab
777
+ engine: json_engine
778
+ paging: true
779
+ search_url: https://gitlab.com/api/v4/projects?search={query}&page={pageno}
780
+ url_query: web_url
781
+ title_query: name_with_namespace
782
+ content_query: description
783
+ page_size: 20
784
+ categories: [it, repos]
785
+ shortcut: gl
786
+ timeout: 10.0
787
+ disabled: true
788
+ about:
789
+ website: https://about.gitlab.com/
790
+ wikidata_id: Q16639197
791
+ official_api_documentation: https://docs.gitlab.com/ee/api/
792
+ use_official_api: false
793
+ require_api_key: false
794
+ results: JSON
795
+
796
+ - name: github
797
+ engine: github
798
+ shortcut: gh
799
+
800
+ # This a Gitea service. If you would like to use a different instance,
801
+ # change codeberg.org to URL of the desired Gitea host. Or you can create a
802
+ # new engine by copying this and changing the name, shortcut and search_url.
803
+
804
+ - name: codeberg
805
+ engine: json_engine
806
+ search_url: https://codeberg.org/api/v1/repos/search?q={query}&limit=10
807
+ url_query: html_url
808
+ title_query: name
809
+ content_query: description
810
+ categories: [it, repos]
811
+ shortcut: cb
812
+ disabled: true
813
+ about:
814
+ website: https://codeberg.org/
815
+ wikidata_id:
816
+ official_api_documentation: https://try.gitea.io/api/swagger
817
+ use_official_api: false
818
+ require_api_key: false
819
+ results: JSON
820
+
821
+ - name: goodreads
822
+ engine: goodreads
823
+ shortcut: good
824
+ timeout: 4.0
825
+ disabled: true
826
+
827
+ - name: google
828
+ engine: google
829
+ shortcut: go
830
+ # additional_tests:
831
+ # android: *test_android
832
+
833
+ - name: google images
834
+ engine: google_images
835
+ shortcut: goi
836
+ # additional_tests:
837
+ # android: *test_android
838
+ # dali:
839
+ # matrix:
840
+ # query: ['Dali Christ']
841
+ # lang: ['en', 'de', 'fr', 'zh-CN']
842
+ # result_container:
843
+ # - ['one_title_contains', 'Salvador']
844
+
845
+ - name: google news
846
+ engine: google_news
847
+ shortcut: gon
848
+ # additional_tests:
849
+ # android: *test_android
850
+
851
+ - name: google videos
852
+ engine: google_videos
853
+ shortcut: gov
854
+ # additional_tests:
855
+ # android: *test_android
856
+
857
+ - name: google scholar
858
+ engine: google_scholar
859
+ shortcut: gos
860
+
861
+ - name: google play apps
862
+ engine: google_play
863
+ categories: [files, apps]
864
+ shortcut: gpa
865
+ play_categ: apps
866
+ disabled: true
867
+
868
+ - name: google play movies
869
+ engine: google_play
870
+ categories: videos
871
+ shortcut: gpm
872
+ play_categ: movies
873
+ disabled: true
874
+
875
+ - name: material icons
876
+ engine: material_icons
877
+ categories: images
878
+ shortcut: mi
879
+ disabled: true
880
+
881
+ - name: gpodder
882
+ engine: json_engine
883
+ shortcut: gpod
884
+ timeout: 4.0
885
+ paging: false
886
+ search_url: https://gpodder.net/search.json?q={query}
887
+ url_query: url
888
+ title_query: title
889
+ content_query: description
890
+ page_size: 19
891
+ categories: music
892
+ disabled: true
893
+ about:
894
+ website: https://gpodder.net
895
+ wikidata_id: Q3093354
896
+ official_api_documentation: https://gpoddernet.readthedocs.io/en/latest/api/
897
+ use_official_api: false
898
+ requires_api_key: false
899
+ results: JSON
900
+
901
+ - name: habrahabr
902
+ engine: xpath
903
+ paging: true
904
+ search_url: https://habr.com/en/search/page{pageno}/?q={query}
905
+ results_xpath: //article[contains(@class, "tm-articles-list__item")]
906
+ url_xpath: .//a[@class="tm-title__link"]/@href
907
+ title_xpath: .//a[@class="tm-title__link"]
908
+ content_xpath: .//div[contains(@class, "article-formatted-body")]
909
+ categories: it
910
+ timeout: 4.0
911
+ disabled: true
912
+ shortcut: habr
913
+ about:
914
+ website: https://habr.com/
915
+ wikidata_id: Q4494434
916
+ official_api_documentation: https://habr.com/en/docs/help/api/
917
+ use_official_api: false
918
+ require_api_key: false
919
+ results: HTML
920
+
921
+ - name: hackernews
922
+ engine: hackernews
923
+ shortcut: hn
924
+ disabled: true
925
+
926
+ - name: hoogle
927
+ engine: xpath
928
+ paging: true
929
+ search_url: https://hoogle.haskell.org/?hoogle={query}&start={pageno}
930
+ results_xpath: '//div[@class="result"]'
931
+ title_xpath: './/div[@class="ans"]//a'
932
+ url_xpath: './/div[@class="ans"]//a/@href'
933
+ content_xpath: './/div[@class="from"]'
934
+ page_size: 20
935
+ categories: [it, packages]
936
+ shortcut: ho
937
+ about:
938
+ website: https://hoogle.haskell.org/
939
+ wikidata_id: Q34010
940
+ official_api_documentation: https://hackage.haskell.org/api
941
+ use_official_api: false
942
+ require_api_key: false
943
+ results: JSON
944
+
945
+ - name: imdb
946
+ engine: imdb
947
+ shortcut: imdb
948
+ timeout: 6.0
949
+ disabled: true
950
+
951
+ - name: imgur
952
+ engine: imgur
953
+ shortcut: img
954
+ disabled: true
955
+
956
+ - name: ina
957
+ engine: ina
958
+ shortcut: in
959
+ timeout: 6.0
960
+ disabled: true
961
+
962
+ - name: invidious
963
+ engine: invidious
964
+ # Instanes will be selected randomly, see https://api.invidious.io/ for
965
+ # instances that are stable (good uptime) and close to you.
966
+ base_url:
967
+ - https://invidious.io.lol
968
+ - https://invidious.fdn.fr
969
+ - https://yt.artemislena.eu
970
+ - https://invidious.tiekoetter.com
971
+ - https://invidious.flokinet.to
972
+ - https://vid.puffyan.us
973
+ - https://invidious.privacydev.net
974
+ - https://inv.tux.pizza
975
+ shortcut: iv
976
+ timeout: 3.0
977
+ disabled: true
978
+
979
+ - name: jisho
980
+ engine: jisho
981
+ shortcut: js
982
+ timeout: 3.0
983
+ disabled: true
984
+
985
+ - name: kickass
986
+ engine: kickass
987
+ base_url:
988
+ - https://kickasstorrents.to
989
+ - https://kickasstorrents.cr
990
+ - https://kickasstorrent.cr
991
+ - https://kickass.sx
992
+ - https://kat.am
993
+ shortcut: kc
994
+ timeout: 4.0
995
+
996
+ - name: lemmy communities
997
+ engine: lemmy
998
+ lemmy_type: Communities
999
+ shortcut: leco
1000
+
1001
+ - name: lemmy users
1002
+ engine: lemmy
1003
+ network: lemmy communities
1004
+ lemmy_type: Users
1005
+ shortcut: leus
1006
+
1007
+ - name: lemmy posts
1008
+ engine: lemmy
1009
+ network: lemmy communities
1010
+ lemmy_type: Posts
1011
+ shortcut: lepo
1012
+
1013
+ - name: lemmy comments
1014
+ engine: lemmy
1015
+ network: lemmy communities
1016
+ lemmy_type: Comments
1017
+ shortcut: lecom
1018
+
1019
+ - name: library genesis
1020
+ engine: xpath
1021
+ # search_url: https://libgen.is/search.php?req={query}
1022
+ search_url: https://libgen.rs/search.php?req={query}
1023
+ url_xpath: //a[contains(@href,"book/index.php?md5")]/@href
1024
+ title_xpath: //a[contains(@href,"book/")]/text()[1]
1025
+ content_xpath: //td/a[1][contains(@href,"=author")]/text()
1026
+ categories: files
1027
+ timeout: 7.0
1028
+ disabled: true
1029
+ shortcut: lg
1030
+ about:
1031
+ website: https://libgen.fun/
1032
+ wikidata_id: Q22017206
1033
+ official_api_documentation:
1034
+ use_official_api: false
1035
+ require_api_key: false
1036
+ results: HTML
1037
+
1038
+ - name: z-library
1039
+ engine: zlibrary
1040
+ shortcut: zlib
1041
+ categories: files
1042
+ timeout: 7.0
1043
+
1044
+ - name: library of congress
1045
+ engine: loc
1046
+ shortcut: loc
1047
+ categories: images
1048
+
1049
+ - name: lingva
1050
+ engine: lingva
1051
+ shortcut: lv
1052
+ # set lingva instance in url, by default it will use the official instance
1053
+ # url: https://lingva.thedaviddelta.com
1054
+
1055
+ - name: lobste.rs
1056
+ engine: xpath
1057
+ search_url: https://lobste.rs/search?utf8=%E2%9C%93&q={query}&what=stories&order=relevance
1058
+ results_xpath: //li[contains(@class, "story")]
1059
+ url_xpath: .//a[@class="u-url"]/@href
1060
+ title_xpath: .//a[@class="u-url"]
1061
+ content_xpath: .//a[@class="domain"]
1062
+ categories: it
1063
+ shortcut: lo
1064
+ timeout: 5.0
1065
+ disabled: true
1066
+ about:
1067
+ website: https://lobste.rs/
1068
+ wikidata_id: Q60762874
1069
+ official_api_documentation:
1070
+ use_official_api: false
1071
+ require_api_key: false
1072
+ results: HTML
1073
+
1074
+ - name: mastodon users
1075
+ engine: mastodon
1076
+ mastodon_type: accounts
1077
+ base_url: https://mastodon.social
1078
+ shortcut: mau
1079
+
1080
+ - name: mastodon hashtags
1081
+ engine: mastodon
1082
+ mastodon_type: hashtags
1083
+ base_url: https://mastodon.social
1084
+ shortcut: mah
1085
+
1086
+ # - name: matrixrooms
1087
+ # engine: mrs
1088
+ # # https://docs.searxng.org/dev/engines/online/mrs.html
1089
+ # # base_url: https://mrs-api-host
1090
+ # shortcut: mtrx
1091
+ # disabled: true
1092
+
1093
+ - name: mdn
1094
+ shortcut: mdn
1095
+ engine: json_engine
1096
+ categories: [it]
1097
+ paging: true
1098
+ search_url: https://developer.mozilla.org/api/v1/search?q={query}&page={pageno}
1099
+ results_query: documents
1100
+ url_query: mdn_url
1101
+ url_prefix: https://developer.mozilla.org
1102
+ title_query: title
1103
+ content_query: summary
1104
+ about:
1105
+ website: https://developer.mozilla.org
1106
+ wikidata_id: Q3273508
1107
+ official_api_documentation: null
1108
+ use_official_api: false
1109
+ require_api_key: false
1110
+ results: JSON
1111
+
1112
+ - name: metacpan
1113
+ engine: metacpan
1114
+ shortcut: cpan
1115
+ disabled: true
1116
+ number_of_results: 20
1117
+
1118
+ # - name: meilisearch
1119
+ # engine: meilisearch
1120
+ # shortcut: mes
1121
+ # enable_http: true
1122
+ # base_url: http://localhost:7700
1123
+ # index: my-index
1124
+
1125
+ - name: mixcloud
1126
+ engine: mixcloud
1127
+ shortcut: mc
1128
+
1129
+ # MongoDB engine
1130
+ # Required dependency: pymongo
1131
+ # - name: mymongo
1132
+ # engine: mongodb
1133
+ # shortcut: md
1134
+ # exact_match_only: false
1135
+ # host: '127.0.0.1'
1136
+ # port: 27017
1137
+ # enable_http: true
1138
+ # results_per_page: 20
1139
+ # database: 'business'
1140
+ # collection: 'reviews' # name of the db collection
1141
+ # key: 'name' # key in the collection to search for
1142
+
1143
+ - name: mozhi
1144
+ engine: mozhi
1145
+ base_url:
1146
+ - https://mozhi.aryak.me
1147
+ - https://translate.bus-hit.me
1148
+ - https://nyc1.mz.ggtyler.dev
1149
+ # mozhi_engine: google - see https://mozhi.aryak.me for supported engines
1150
+ timeout: 4.0
1151
+ shortcut: mz
1152
+ disabled: true
1153
+
1154
+ - name: mwmbl
1155
+ engine: mwmbl
1156
+ # api_url: https://api.mwmbl.org
1157
+ shortcut: mwm
1158
+ disabled: true
1159
+
1160
+ - name: npm
1161
+ engine: json_engine
1162
+ paging: true
1163
+ first_page_num: 0
1164
+ search_url: https://api.npms.io/v2/search?q={query}&size=25&from={pageno}
1165
+ results_query: results
1166
+ url_query: package/links/npm
1167
+ title_query: package/name
1168
+ content_query: package/description
1169
+ page_size: 25
1170
+ categories: [it, packages]
1171
+ disabled: true
1172
+ timeout: 5.0
1173
+ shortcut: npm
1174
+ about:
1175
+ website: https://npms.io/
1176
+ wikidata_id: Q7067518
1177
+ official_api_documentation: https://api-docs.npms.io/
1178
+ use_official_api: false
1179
+ require_api_key: false
1180
+ results: JSON
1181
+
1182
+ - name: nyaa
1183
+ engine: nyaa
1184
+ shortcut: nt
1185
+ disabled: true
1186
+
1187
+ - name: mankier
1188
+ engine: json_engine
1189
+ search_url: https://www.mankier.com/api/v2/mans/?q={query}
1190
+ results_query: results
1191
+ url_query: url
1192
+ title_query: name
1193
+ content_query: description
1194
+ categories: it
1195
+ shortcut: man
1196
+ about:
1197
+ website: https://www.mankier.com/
1198
+ official_api_documentation: https://www.mankier.com/api
1199
+ use_official_api: true
1200
+ require_api_key: false
1201
+ results: JSON
1202
+
1203
+ - name: odysee
1204
+ engine: odysee
1205
+ shortcut: od
1206
+ disabled: true
1207
+
1208
+ - name: openairedatasets
1209
+ engine: json_engine
1210
+ paging: true
1211
+ search_url: https://api.openaire.eu/search/datasets?format=json&page={pageno}&size=10&title={query}
1212
+ results_query: response/results/result
1213
+ url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$
1214
+ title_query: metadata/oaf:entity/oaf:result/title/$
1215
+ content_query: metadata/oaf:entity/oaf:result/description/$
1216
+ content_html_to_text: true
1217
+ categories: 'science'
1218
+ shortcut: oad
1219
+ timeout: 5.0
1220
+ about:
1221
+ website: https://www.openaire.eu/
1222
+ wikidata_id: Q25106053
1223
+ official_api_documentation: https://api.openaire.eu/
1224
+ use_official_api: false
1225
+ require_api_key: false
1226
+ results: JSON
1227
+
1228
+ - name: openairepublications
1229
+ engine: json_engine
1230
+ paging: true
1231
+ search_url: https://api.openaire.eu/search/publications?format=json&page={pageno}&size=10&title={query}
1232
+ results_query: response/results/result
1233
+ url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$
1234
+ title_query: metadata/oaf:entity/oaf:result/title/$
1235
+ content_query: metadata/oaf:entity/oaf:result/description/$
1236
+ content_html_to_text: true
1237
+ categories: science
1238
+ shortcut: oap
1239
+ timeout: 5.0
1240
+ about:
1241
+ website: https://www.openaire.eu/
1242
+ wikidata_id: Q25106053
1243
+ official_api_documentation: https://api.openaire.eu/
1244
+ use_official_api: false
1245
+ require_api_key: false
1246
+ results: JSON
1247
+
1248
+ # - name: opensemanticsearch
1249
+ # engine: opensemantic
1250
+ # shortcut: oss
1251
+ # base_url: 'http://localhost:8983/solr/opensemanticsearch/'
1252
+
1253
+ - name: openstreetmap
1254
+ engine: openstreetmap
1255
+ shortcut: osm
1256
+
1257
+ - name: openrepos
1258
+ engine: xpath
1259
+ paging: true
1260
+ search_url: https://openrepos.net/search/node/{query}?page={pageno}
1261
+ url_xpath: //li[@class="search-result"]//h3[@class="title"]/a/@href
1262
+ title_xpath: //li[@class="search-result"]//h3[@class="title"]/a
1263
+ content_xpath: //li[@class="search-result"]//div[@class="search-snippet-info"]//p[@class="search-snippet"]
1264
+ categories: files
1265
+ timeout: 4.0
1266
+ disabled: true
1267
+ shortcut: or
1268
+ about:
1269
+ website: https://openrepos.net/
1270
+ wikidata_id:
1271
+ official_api_documentation:
1272
+ use_official_api: false
1273
+ require_api_key: false
1274
+ results: HTML
1275
+
1276
+ - name: packagist
1277
+ engine: json_engine
1278
+ paging: true
1279
+ search_url: https://packagist.org/search.json?q={query}&page={pageno}
1280
+ results_query: results
1281
+ url_query: url
1282
+ title_query: name
1283
+ content_query: description
1284
+ categories: [it, packages]
1285
+ disabled: true
1286
+ timeout: 5.0
1287
+ shortcut: pack
1288
+ about:
1289
+ website: https://packagist.org
1290
+ wikidata_id: Q108311377
1291
+ official_api_documentation: https://packagist.org/apidoc
1292
+ use_official_api: true
1293
+ require_api_key: false
1294
+ results: JSON
1295
+
1296
+ - name: pdbe
1297
+ engine: pdbe
1298
+ shortcut: pdb
1299
+ # Hide obsolete PDB entries. Default is not to hide obsolete structures
1300
+ # hide_obsolete: false
1301
+
1302
+ - name: photon
1303
+ engine: photon
1304
+ shortcut: ph
1305
+
1306
+ - name: pinterest
1307
+ engine: pinterest
1308
+ shortcut: pin
1309
+
1310
+ - name: piped
1311
+ engine: piped
1312
+ shortcut: ppd
1313
+ categories: videos
1314
+ piped_filter: videos
1315
+ timeout: 3.0
1316
+
1317
+ # URL to use as link and for embeds
1318
+ frontend_url: https://srv.piped.video
1319
+ # Instance will be selected randomly, for more see https://piped-instances.kavin.rocks/
1320
+ backend_url:
1321
+ - https://pipedapi.kavin.rocks
1322
+ - https://pipedapi-libre.kavin.rocks
1323
+ - https://pipedapi.adminforge.de
1324
+
1325
+ - name: piped.music
1326
+ engine: piped
1327
+ network: piped
1328
+ shortcut: ppdm
1329
+ categories: music
1330
+ piped_filter: music_songs
1331
+ timeout: 3.0
1332
+
1333
+ - name: piratebay
1334
+ engine: piratebay
1335
+ shortcut: tpb
1336
+ # You may need to change this URL to a proxy if piratebay is blocked in your
1337
+ # country
1338
+ url: https://thepiratebay.org/
1339
+ timeout: 3.0
1340
+
1341
+ - name: podcastindex
1342
+ engine: podcastindex
1343
+ shortcut: podcast
1344
+
1345
+ # Required dependency: psychopg2
1346
+ # - name: postgresql
1347
+ # engine: postgresql
1348
+ # database: postgres
1349
+ # username: postgres
1350
+ # password: postgres
1351
+ # limit: 10
1352
+ # query_str: 'SELECT * from my_table WHERE my_column = %(query)s'
1353
+ # shortcut : psql
1354
+
1355
+ - name: presearch
1356
+ engine: presearch
1357
+ search_type: search
1358
+ categories: [general, web]
1359
+ shortcut: ps
1360
+ timeout: 4.0
1361
+ disabled: true
1362
+
1363
+ - name: presearch images
1364
+ engine: presearch
1365
+ network: presearch
1366
+ search_type: images
1367
+ categories: [images, web]
1368
+ timeout: 4.0
1369
+ shortcut: psimg
1370
+ disabled: true
1371
+
1372
+ - name: presearch videos
1373
+ engine: presearch
1374
+ network: presearch
1375
+ search_type: videos
1376
+ categories: [general, web]
1377
+ timeout: 4.0
1378
+ shortcut: psvid
1379
+ disabled: true
1380
+
1381
+ - name: presearch news
1382
+ engine: presearch
1383
+ network: presearch
1384
+ search_type: news
1385
+ categories: [news, web]
1386
+ timeout: 4.0
1387
+ shortcut: psnews
1388
+ disabled: true
1389
+
1390
+ - name: pub.dev
1391
+ engine: xpath
1392
+ shortcut: pd
1393
+ search_url: https://pub.dev/packages?q={query}&page={pageno}
1394
+ paging: true
1395
+ results_xpath: //div[contains(@class,"packages-item")]
1396
+ url_xpath: ./div/h3/a/@href
1397
+ title_xpath: ./div/h3/a
1398
+ content_xpath: ./div/div/div[contains(@class,"packages-description")]/span
1399
+ categories: [packages, it]
1400
+ timeout: 3.0
1401
+ disabled: true
1402
+ first_page_num: 1
1403
+ about:
1404
+ website: https://pub.dev/
1405
+ official_api_documentation: https://pub.dev/help/api
1406
+ use_official_api: false
1407
+ require_api_key: false
1408
+ results: HTML
1409
+
1410
+ - name: pubmed
1411
+ engine: pubmed
1412
+ shortcut: pub
1413
+ timeout: 3.0
1414
+
1415
+ - name: pypi
1416
+ shortcut: pypi
1417
+ engine: xpath
1418
+ paging: true
1419
+ search_url: https://pypi.org/search/?q={query}&page={pageno}
1420
+ results_xpath: /html/body/main/div/div/div/form/div/ul/li/a[@class="package-snippet"]
1421
+ url_xpath: ./@href
1422
+ title_xpath: ./h3/span[@class="package-snippet__name"]
1423
+ content_xpath: ./p
1424
+ suggestion_xpath: /html/body/main/div/div/div/form/div/div[@class="callout-block"]/p/span/a[@class="link"]
1425
+ first_page_num: 1
1426
+ categories: [it, packages]
1427
+ about:
1428
+ website: https://pypi.org
1429
+ wikidata_id: Q2984686
1430
+ official_api_documentation: https://warehouse.readthedocs.io/api-reference/index.html
1431
+ use_official_api: false
1432
+ require_api_key: false
1433
+ results: HTML
1434
+
1435
+ - name: qwant
1436
+ qwant_categ: web
1437
+ engine: qwant
1438
+ shortcut: qw
1439
+ categories: [general, web]
1440
+ additional_tests:
1441
+ rosebud: *test_rosebud
1442
+
1443
+ - name: qwant news
1444
+ qwant_categ: news
1445
+ engine: qwant
1446
+ shortcut: qwn
1447
+ categories: news
1448
+ network: qwant
1449
+
1450
+ - name: qwant images
1451
+ qwant_categ: images
1452
+ engine: qwant
1453
+ shortcut: qwi
1454
+ categories: [images, web]
1455
+ network: qwant
1456
+
1457
+ - name: qwant videos
1458
+ qwant_categ: videos
1459
+ engine: qwant
1460
+ shortcut: qwv
1461
+ categories: [videos, web]
1462
+ network: qwant
1463
+
1464
+ # - name: library
1465
+ # engine: recoll
1466
+ # shortcut: lib
1467
+ # base_url: 'https://recoll.example.org/'
1468
+ # search_dir: ''
1469
+ # mount_prefix: /export
1470
+ # dl_prefix: 'https://download.example.org'
1471
+ # timeout: 30.0
1472
+ # categories: files
1473
+ # disabled: true
1474
+
1475
+ # - name: recoll library reference
1476
+ # engine: recoll
1477
+ # base_url: 'https://recoll.example.org/'
1478
+ # search_dir: reference
1479
+ # mount_prefix: /export
1480
+ # dl_prefix: 'https://download.example.org'
1481
+ # shortcut: libr
1482
+ # timeout: 30.0
1483
+ # categories: files
1484
+ # disabled: true
1485
+
1486
+ - name: radio browser
1487
+ engine: radio_browser
1488
+ shortcut: rb
1489
+
1490
+ - name: reddit
1491
+ engine: reddit
1492
+ shortcut: re
1493
+ page_size: 25
1494
+
1495
+ - name: rottentomatoes
1496
+ engine: rottentomatoes
1497
+ shortcut: rt
1498
+ disabled: true
1499
+
1500
+ # Required dependency: redis
1501
+ # - name: myredis
1502
+ # shortcut : rds
1503
+ # engine: redis_server
1504
+ # exact_match_only: false
1505
+ # host: '127.0.0.1'
1506
+ # port: 6379
1507
+ # enable_http: true
1508
+ # password: ''
1509
+ # db: 0
1510
+
1511
+ # tmp suspended: bad certificate
1512
+ # - name: scanr structures
1513
+ # shortcut: scs
1514
+ # engine: scanr_structures
1515
+ # disabled: true
1516
+
1517
+ - name: sepiasearch
1518
+ engine: sepiasearch
1519
+ shortcut: sep
1520
+
1521
+ - name: soundcloud
1522
+ engine: soundcloud
1523
+ shortcut: sc
1524
+
1525
+ - name: stackoverflow
1526
+ engine: stackexchange
1527
+ shortcut: st
1528
+ api_site: 'stackoverflow'
1529
+ categories: [it, q&a]
1530
+
1531
+ - name: askubuntu
1532
+ engine: stackexchange
1533
+ shortcut: ubuntu
1534
+ api_site: 'askubuntu'
1535
+ categories: [it, q&a]
1536
+
1537
+ - name: internetarchivescholar
1538
+ engine: internet_archive_scholar
1539
+ shortcut: ias
1540
+ timeout: 5.0
1541
+
1542
+ - name: superuser
1543
+ engine: stackexchange
1544
+ shortcut: su
1545
+ api_site: 'superuser'
1546
+ categories: [it, q&a]
1547
+
1548
+ - name: searchcode code
1549
+ engine: searchcode_code
1550
+ shortcut: scc
1551
+ disabled: true
1552
+
1553
+ # - name: searx
1554
+ # engine: searx_engine
1555
+ # shortcut: se
1556
+ # instance_urls :
1557
+ # - http://127.0.0.1:8888/
1558
+ # - ...
1559
+ # disabled: true
1560
+
1561
+ - name: semantic scholar
1562
+ engine: semantic_scholar
1563
+ disabled: true
1564
+ shortcut: se
1565
+
1566
+ # Spotify needs API credentials
1567
+ # - name: spotify
1568
+ # engine: spotify
1569
+ # shortcut: stf
1570
+ # api_client_id: *******
1571
+ # api_client_secret: *******
1572
+
1573
+ # - name: solr
1574
+ # engine: solr
1575
+ # shortcut: slr
1576
+ # base_url: http://localhost:8983
1577
+ # collection: collection_name
1578
+ # sort: '' # sorting: asc or desc
1579
+ # field_list: '' # comma separated list of field names to display on the UI
1580
+ # default_fields: '' # default field to query
1581
+ # query_fields: '' # query fields
1582
+ # enable_http: true
1583
+
1584
+ # - name: springer nature
1585
+ # engine: springer
1586
+ # # get your API key from: https://dev.springernature.com/signup
1587
+ # # working API key, for test & debug: "a69685087d07eca9f13db62f65b8f601"
1588
+ # api_key: 'unset'
1589
+ # shortcut: springer
1590
+ # timeout: 15.0
1591
+
1592
+ - name: startpage
1593
+ engine: startpage
1594
+ shortcut: sp
1595
+ timeout: 6.0
1596
+ disabled: true
1597
+ additional_tests:
1598
+ rosebud: *test_rosebud
1599
+
1600
+ - name: tokyotoshokan
1601
+ engine: tokyotoshokan
1602
+ shortcut: tt
1603
+ timeout: 6.0
1604
+ disabled: true
1605
+
1606
+ - name: solidtorrents
1607
+ engine: solidtorrents
1608
+ shortcut: solid
1609
+ timeout: 4.0
1610
+ base_url:
1611
+ - https://solidtorrents.to
1612
+ - https://bitsearch.to
1613
+
1614
+ # For this demo of the sqlite engine download:
1615
+ # https://liste.mediathekview.de/filmliste-v2.db.bz2
1616
+ # and unpack into searx/data/filmliste-v2.db
1617
+ # Query to test: "!demo concert"
1618
+ #
1619
+ # - name: demo
1620
+ # engine: sqlite
1621
+ # shortcut: demo
1622
+ # categories: general
1623
+ # result_template: default.html
1624
+ # database: searx/data/filmliste-v2.db
1625
+ # query_str: >-
1626
+ # SELECT title || ' (' || time(duration, 'unixepoch') || ')' AS title,
1627
+ # COALESCE( NULLIF(url_video_hd,''), NULLIF(url_video_sd,''), url_video) AS url,
1628
+ # description AS content
1629
+ # FROM film
1630
+ # WHERE title LIKE :wildcard OR description LIKE :wildcard
1631
+ # ORDER BY duration DESC
1632
+
1633
+ - name: tagesschau
1634
+ engine: tagesschau
1635
+ # when set to false, display URLs from Tagesschau, and not the actual source
1636
+ # (e.g. NDR, WDR, SWR, HR, ...)
1637
+ use_source_url: true
1638
+ shortcut: ts
1639
+ disabled: true
1640
+
1641
+ - name: tmdb
1642
+ engine: xpath
1643
+ paging: true
1644
+ categories: movies
1645
+ search_url: https://www.themoviedb.org/search?page={pageno}&query={query}
1646
+ results_xpath: //div[contains(@class,"movie") or contains(@class,"tv")]//div[contains(@class,"card")]
1647
+ url_xpath: .//div[contains(@class,"poster")]/a/@href
1648
+ thumbnail_xpath: .//img/@src
1649
+ title_xpath: .//div[contains(@class,"title")]//h2
1650
+ content_xpath: .//div[contains(@class,"overview")]
1651
+ shortcut: tm
1652
+ disabled: true
1653
+
1654
+ # Requires Tor
1655
+ - name: torch
1656
+ engine: xpath
1657
+ paging: true
1658
+ search_url: http://xmh57jrknzkhv6y3ls3ubitzfqnkrwxhopf5aygthi7d6rplyvk3noyd.onion/cgi-bin/omega/omega?P={query}&DEFAULTOP=and
1659
+ results_xpath: //table//tr
1660
+ url_xpath: ./td[2]/a
1661
+ title_xpath: ./td[2]/b
1662
+ content_xpath: ./td[2]/small
1663
+ categories: onions
1664
+ enable_http: true
1665
+ shortcut: tch
1666
+
1667
+ # torznab engine lets you query any torznab compatible indexer. Using this
1668
+ # engine in combination with Jackett opens the possibility to query a lot of
1669
+ # public and private indexers directly from SearXNG. More details at:
1670
+ # https://docs.searxng.org/dev/engines/online/torznab.html
1671
+ #
1672
+ # - name: Torznab EZTV
1673
+ # engine: torznab
1674
+ # shortcut: eztv
1675
+ # base_url: http://localhost:9117/api/v2.0/indexers/eztv/results/torznab
1676
+ # enable_http: true # if using localhost
1677
+ # api_key: xxxxxxxxxxxxxxx
1678
+ # show_magnet_links: true
1679
+ # show_torrent_files: false
1680
+ # # https://github.com/Jackett/Jackett/wiki/Jackett-Categories
1681
+ # torznab_categories: # optional
1682
+ # - 2000
1683
+ # - 5000
1684
+
1685
+ # tmp suspended - too slow, too many errors
1686
+ # - name: urbandictionary
1687
+ # engine : xpath
1688
+ # search_url : https://www.urbandictionary.com/define.php?term={query}
1689
+ # url_xpath : //*[@class="word"]/@href
1690
+ # title_xpath : //*[@class="def-header"]
1691
+ # content_xpath: //*[@class="meaning"]
1692
+ # shortcut: ud
1693
+
1694
+ - name: unsplash
1695
+ engine: unsplash
1696
+ shortcut: us
1697
+
1698
+ - name: yandex music
1699
+ engine: yandex_music
1700
+ shortcut: ydm
1701
+ disabled: true
1702
+ # https://yandex.com/support/music/access.html
1703
+ inactive: true
1704
+
1705
+ - name: yahoo
1706
+ engine: yahoo
1707
+ shortcut: yh
1708
+ disabled: true
1709
+
1710
+ - name: yahoo news
1711
+ engine: yahoo_news
1712
+ shortcut: yhn
1713
+
1714
+ - name: youtube
1715
+ shortcut: yt
1716
+ # You can use the engine using the official stable API, but you need an API
1717
+ # key See: https://console.developers.google.com/project
1718
+ #
1719
+ # engine: youtube_api
1720
+ # api_key: 'apikey' # required!
1721
+ #
1722
+ # Or you can use the html non-stable engine, activated by default
1723
+ engine: youtube_noapi
1724
+
1725
+ - name: dailymotion
1726
+ engine: dailymotion
1727
+ shortcut: dm
1728
+
1729
+ - name: vimeo
1730
+ engine: vimeo
1731
+ shortcut: vm
1732
+
1733
+ - name: wiby
1734
+ engine: json_engine
1735
+ paging: true
1736
+ search_url: https://wiby.me/json/?q={query}&p={pageno}
1737
+ url_query: URL
1738
+ title_query: Title
1739
+ content_query: Snippet
1740
+ categories: [general, web]
1741
+ shortcut: wib
1742
+ disabled: true
1743
+ about:
1744
+ website: https://wiby.me/
1745
+
1746
+ - name: alexandria
1747
+ engine: json_engine
1748
+ shortcut: alx
1749
+ categories: general
1750
+ paging: true
1751
+ search_url: https://api.alexandria.org/?a=1&q={query}&p={pageno}
1752
+ results_query: results
1753
+ title_query: title
1754
+ url_query: url
1755
+ content_query: snippet
1756
+ timeout: 1.5
1757
+ disabled: true
1758
+ about:
1759
+ website: https://alexandria.org/
1760
+ official_api_documentation: https://github.com/alexandria-org/alexandria-api/raw/master/README.md
1761
+ use_official_api: true
1762
+ require_api_key: false
1763
+ results: JSON
1764
+
1765
+ - name: wikibooks
1766
+ engine: mediawiki
1767
+ weight: 0.5
1768
+ shortcut: wb
1769
+ categories: [general, wikimedia]
1770
+ base_url: 'https://{language}.wikibooks.org/'
1771
+ search_type: text
1772
+ disabled: true
1773
+ about:
1774
+ website: https://www.wikibooks.org/
1775
+ wikidata_id: Q367
1776
+
1777
+ - name: wikinews
1778
+ engine: mediawiki
1779
+ shortcut: wn
1780
+ categories: [news, wikimedia]
1781
+ base_url: 'https://{language}.wikinews.org/'
1782
+ search_type: text
1783
+ srsort: create_timestamp_desc
1784
+ about:
1785
+ website: https://www.wikinews.org/
1786
+ wikidata_id: Q964
1787
+
1788
+ - name: wikiquote
1789
+ engine: mediawiki
1790
+ weight: 0.5
1791
+ shortcut: wq
1792
+ categories: [general, wikimedia]
1793
+ base_url: 'https://{language}.wikiquote.org/'
1794
+ search_type: text
1795
+ disabled: true
1796
+ additional_tests:
1797
+ rosebud: *test_rosebud
1798
+ about:
1799
+ website: https://www.wikiquote.org/
1800
+ wikidata_id: Q369
1801
+
1802
+ - name: wikisource
1803
+ engine: mediawiki
1804
+ weight: 0.5
1805
+ shortcut: ws
1806
+ categories: [general, wikimedia]
1807
+ base_url: 'https://{language}.wikisource.org/'
1808
+ search_type: text
1809
+ disabled: true
1810
+ about:
1811
+ website: https://www.wikisource.org/
1812
+ wikidata_id: Q263
1813
+
1814
+ - name: wikispecies
1815
+ engine: mediawiki
1816
+ shortcut: wsp
1817
+ categories: [general, science, wikimedia]
1818
+ base_url: 'https://species.wikimedia.org/'
1819
+ search_type: text
1820
+ disabled: true
1821
+ about:
1822
+ website: https://species.wikimedia.org/
1823
+ wikidata_id: Q13679
1824
+
1825
+ - name: wiktionary
1826
+ engine: mediawiki
1827
+ shortcut: wt
1828
+ categories: [dictionaries, wikimedia]
1829
+ base_url: 'https://{language}.wiktionary.org/'
1830
+ search_type: text
1831
+ about:
1832
+ website: https://www.wiktionary.org/
1833
+ wikidata_id: Q151
1834
+
1835
+ - name: wikiversity
1836
+ engine: mediawiki
1837
+ weight: 0.5
1838
+ shortcut: wv
1839
+ categories: [general, wikimedia]
1840
+ base_url: 'https://{language}.wikiversity.org/'
1841
+ search_type: text
1842
+ disabled: true
1843
+ about:
1844
+ website: https://www.wikiversity.org/
1845
+ wikidata_id: Q370
1846
+
1847
+ - name: wikivoyage
1848
+ engine: mediawiki
1849
+ weight: 0.5
1850
+ shortcut: wy
1851
+ categories: [general, wikimedia]
1852
+ base_url: 'https://{language}.wikivoyage.org/'
1853
+ search_type: text
1854
+ disabled: true
1855
+ about:
1856
+ website: https://www.wikivoyage.org/
1857
+ wikidata_id: Q373
1858
+
1859
+ - name: wikicommons.images
1860
+ engine: wikicommons
1861
+ shortcut: wc
1862
+ categories: images
1863
+ number_of_results: 10
1864
+
1865
+ - name: wolframalpha
1866
+ shortcut: wa
1867
+ # You can use the engine using the official stable API, but you need an API
1868
+ # key. See: https://products.wolframalpha.com/api/
1869
+ #
1870
+ # engine: wolframalpha_api
1871
+ # api_key: ''
1872
+ #
1873
+ # Or you can use the html non-stable engine, activated by default
1874
+ engine: wolframalpha_noapi
1875
+ timeout: 6.0
1876
+ categories: general
1877
+ disabled: false
1878
+
1879
+ - name: dictzone
1880
+ engine: dictzone
1881
+ shortcut: dc
1882
+
1883
+ - name: mymemory translated
1884
+ engine: translated
1885
+ shortcut: tl
1886
+ timeout: 5.0
1887
+ # You can use without an API key, but you are limited to 1000 words/day
1888
+ # See: https://mymemory.translated.net/doc/usagelimits.php
1889
+ # api_key: ''
1890
+
1891
+ # Required dependency: mysql-connector-python
1892
+ # - name: mysql
1893
+ # engine: mysql_server
1894
+ # database: mydatabase
1895
+ # username: user
1896
+ # password: pass
1897
+ # limit: 10
1898
+ # query_str: 'SELECT * from mytable WHERE fieldname=%(query)s'
1899
+ # shortcut: mysql
1900
+
1901
+ - name: 1337x
1902
+ engine: 1337x
1903
+ shortcut: 1337x
1904
+ disabled: true
1905
+
1906
+ - name: duden
1907
+ engine: duden
1908
+ shortcut: du
1909
+ disabled: true
1910
+
1911
+ - name: seznam
1912
+ shortcut: szn
1913
+ engine: seznam
1914
+ disabled: true
1915
+
1916
+ # - name: deepl
1917
+ # engine: deepl
1918
+ # shortcut: dpl
1919
+ # # You can use the engine using the official stable API, but you need an API key
1920
+ # # See: https://www.deepl.com/pro-api?cta=header-pro-api
1921
+ # api_key: '' # required!
1922
+ # timeout: 5.0
1923
+ # disabled: true
1924
+
1925
+ - name: mojeek
1926
+ shortcut: mjk
1927
+ engine: xpath
1928
+ paging: true
1929
+ categories: [general, web]
1930
+ search_url: https://www.mojeek.com/search?q={query}&s={pageno}&lang={lang}&lb={lang}
1931
+ results_xpath: //ul[@class="results-standard"]/li/a[@class="ob"]
1932
+ url_xpath: ./@href
1933
+ title_xpath: ../h2/a
1934
+ content_xpath: ..//p[@class="s"]
1935
+ suggestion_xpath: //div[@class="top-info"]/p[@class="top-info spell"]/em/a
1936
+ first_page_num: 0
1937
+ page_size: 10
1938
+ max_page: 100
1939
+ disabled: true
1940
+ about:
1941
+ website: https://www.mojeek.com/
1942
+ wikidata_id: Q60747299
1943
+ official_api_documentation: https://www.mojeek.com/services/api.html/
1944
+ use_official_api: false
1945
+ require_api_key: false
1946
+ results: HTML
1947
+
1948
+ - name: moviepilot
1949
+ engine: moviepilot
1950
+ shortcut: mp
1951
+ disabled: true
1952
+
1953
+ - name: naver
1954
+ shortcut: nvr
1955
+ categories: [general, web]
1956
+ engine: xpath
1957
+ paging: true
1958
+ search_url: https://search.naver.com/search.naver?where=webkr&sm=osp_hty&ie=UTF-8&query={query}&start={pageno}
1959
+ url_xpath: //a[@class="link_tit"]/@href
1960
+ title_xpath: //a[@class="link_tit"]
1961
+ content_xpath: //a[@class="total_dsc"]/div
1962
+ first_page_num: 1
1963
+ page_size: 10
1964
+ disabled: true
1965
+ about:
1966
+ website: https://www.naver.com/
1967
+ wikidata_id: Q485639
1968
+ official_api_documentation: https://developers.naver.com/docs/nmt/examples/
1969
+ use_official_api: false
1970
+ require_api_key: false
1971
+ results: HTML
1972
+ language: ko
1973
+
1974
+ - name: rubygems
1975
+ shortcut: rbg
1976
+ engine: xpath
1977
+ paging: true
1978
+ search_url: https://rubygems.org/search?page={pageno}&query={query}
1979
+ results_xpath: /html/body/main/div/a[@class="gems__gem"]
1980
+ url_xpath: ./@href
1981
+ title_xpath: ./span/h2
1982
+ content_xpath: ./span/p
1983
+ suggestion_xpath: /html/body/main/div/div[@class="search__suggestions"]/p/a
1984
+ first_page_num: 1
1985
+ categories: [it, packages]
1986
+ disabled: true
1987
+ about:
1988
+ website: https://rubygems.org/
1989
+ wikidata_id: Q1853420
1990
+ official_api_documentation: https://guides.rubygems.org/rubygems-org-api/
1991
+ use_official_api: false
1992
+ require_api_key: false
1993
+ results: HTML
1994
+
1995
+ - name: peertube
1996
+ engine: peertube
1997
+ shortcut: ptb
1998
+ paging: true
1999
+ # alternatives see: https://instances.joinpeertube.org/instances
2000
+ # base_url: https://tube.4aem.com
2001
+ categories: videos
2002
+ disabled: true
2003
+ timeout: 6.0
2004
+
2005
+ - name: mediathekviewweb
2006
+ engine: mediathekviewweb
2007
+ shortcut: mvw
2008
+ disabled: true
2009
+
2010
+ - name: yacy
2011
+ engine: yacy
2012
+ categories: general
2013
+ search_type: text
2014
+ base_url: https://yacy.searchlab.eu
2015
+ shortcut: ya
2016
+ disabled: true
2017
+ # required if you aren't using HTTPS for your local yacy instance
2018
+ # https://docs.searxng.org/dev/engines/online/yacy.html
2019
+ # enable_http: true
2020
+ # timeout: 3.0
2021
+ # search_mode: 'global'
2022
+
2023
+ - name: yacy images
2024
+ engine: yacy
2025
+ categories: images
2026
+ search_type: image
2027
+ base_url: https://yacy.searchlab.eu
2028
+ shortcut: yai
2029
+ disabled: true
2030
+
2031
+ - name: rumble
2032
+ engine: rumble
2033
+ shortcut: ru
2034
+ base_url: https://rumble.com/
2035
+ paging: true
2036
+ categories: videos
2037
+ disabled: true
2038
+
2039
+ - name: livespace
2040
+ engine: livespace
2041
+ shortcut: ls
2042
+ categories: videos
2043
+ disabled: true
2044
+ timeout: 5.0
2045
+
2046
+ - name: wordnik
2047
+ engine: wordnik
2048
+ shortcut: def
2049
+ base_url: https://www.wordnik.com/
2050
+ categories: [dictionaries]
2051
+ timeout: 5.0
2052
+
2053
+ - name: woxikon.de synonyme
2054
+ engine: xpath
2055
+ shortcut: woxi
2056
+ categories: [dictionaries]
2057
+ timeout: 5.0
2058
+ disabled: true
2059
+ search_url: https://synonyme.woxikon.de/synonyme/{query}.php
2060
+ url_xpath: //div[@class="upper-synonyms"]/a/@href
2061
+ content_xpath: //div[@class="synonyms-list-group"]
2062
+ title_xpath: //div[@class="upper-synonyms"]/a
2063
+ no_result_for_http_status: [404]
2064
+ about:
2065
+ website: https://www.woxikon.de/
2066
+ wikidata_id: # No Wikidata ID
2067
+ use_official_api: false
2068
+ require_api_key: false
2069
+ results: HTML
2070
+ language: de
2071
+
2072
+ - name: seekr news
2073
+ engine: seekr
2074
+ shortcut: senews
2075
+ categories: news
2076
+ seekr_category: news
2077
+ disabled: true
2078
+
2079
+ - name: seekr images
2080
+ engine: seekr
2081
+ network: seekr news
2082
+ shortcut: seimg
2083
+ categories: images
2084
+ seekr_category: images
2085
+ disabled: true
2086
+
2087
+ - name: seekr videos
2088
+ engine: seekr
2089
+ network: seekr news
2090
+ shortcut: sevid
2091
+ categories: videos
2092
+ seekr_category: videos
2093
+ disabled: true
2094
+
2095
+ - name: sjp.pwn
2096
+ engine: sjp
2097
+ shortcut: sjp
2098
+ base_url: https://sjp.pwn.pl/
2099
+ timeout: 5.0
2100
+ disabled: true
2101
+
2102
+ - name: stract
2103
+ engine: stract
2104
+ shortcut: str
2105
+ disabled: true
2106
+
2107
+ - name: svgrepo
2108
+ engine: svgrepo
2109
+ shortcut: svg
2110
+ timeout: 10.0
2111
+ disabled: true
2112
+
2113
+ - name: tootfinder
2114
+ engine: tootfinder
2115
+ shortcut: toot
2116
+
2117
+ - name: wallhaven
2118
+ engine: wallhaven
2119
+ # api_key: abcdefghijklmnopqrstuvwxyz
2120
+ shortcut: wh
2121
+
2122
+ # wikimini: online encyclopedia for children
2123
+ # The fulltext and title parameter is necessary for Wikimini because
2124
+ # sometimes it will not show the results and redirect instead
2125
+ - name: wikimini
2126
+ engine: xpath
2127
+ shortcut: wkmn
2128
+ search_url: https://fr.wikimini.org/w/index.php?search={query}&title=Sp%C3%A9cial%3ASearch&fulltext=Search
2129
+ url_xpath: //li/div[@class="mw-search-result-heading"]/a/@href
2130
+ title_xpath: //li//div[@class="mw-search-result-heading"]/a
2131
+ content_xpath: //li/div[@class="searchresult"]
2132
+ categories: general
2133
+ disabled: true
2134
+ about:
2135
+ website: https://wikimini.org/
2136
+ wikidata_id: Q3568032
2137
+ use_official_api: false
2138
+ require_api_key: false
2139
+ results: HTML
2140
+ language: fr
2141
+
2142
+ - name: wttr.in
2143
+ engine: wttr
2144
+ shortcut: wttr
2145
+ timeout: 9.0
2146
+
2147
+ - name: yummly
2148
+ engine: yummly
2149
+ shortcut: yum
2150
+ disabled: true
2151
+
2152
+ - name: brave
2153
+ engine: brave
2154
+ shortcut: br
2155
+ time_range_support: true
2156
+ paging: true
2157
+ categories: [general, web]
2158
+ brave_category: search
2159
+ # brave_spellcheck: true
2160
+
2161
+ - name: brave.images
2162
+ engine: brave
2163
+ network: brave
2164
+ shortcut: brimg
2165
+ categories: [images, web]
2166
+ brave_category: images
2167
+
2168
+ - name: brave.videos
2169
+ engine: brave
2170
+ network: brave
2171
+ shortcut: brvid
2172
+ categories: [videos, web]
2173
+ brave_category: videos
2174
+
2175
+ - name: brave.news
2176
+ engine: brave
2177
+ network: brave
2178
+ shortcut: brnews
2179
+ categories: news
2180
+ brave_category: news
2181
+
2182
+ # - name: brave.goggles
2183
+ # engine: brave
2184
+ # network: brave
2185
+ # shortcut: brgog
2186
+ # time_range_support: true
2187
+ # paging: true
2188
+ # categories: [general, web]
2189
+ # brave_category: goggles
2190
+ # Goggles: # required! This should be a URL ending in .goggle
2191
+
2192
+ - name: lib.rs
2193
+ shortcut: lrs
2194
+ engine: xpath
2195
+ search_url: https://lib.rs/search?q={query}
2196
+ results_xpath: /html/body/main/div/ol/li/a
2197
+ url_xpath: ./@href
2198
+ title_xpath: ./div[@class="h"]/h4
2199
+ content_xpath: ./div[@class="h"]/p
2200
+ categories: [it, packages]
2201
+ disabled: true
2202
+ about:
2203
+ website: https://lib.rs
2204
+ wikidata_id: Q113486010
2205
+ use_official_api: false
2206
+ require_api_key: false
2207
+ results: HTML
2208
+
2209
+ - name: sourcehut
2210
+ shortcut: srht
2211
+ engine: xpath
2212
+ paging: true
2213
+ search_url: https://sr.ht/projects?page={pageno}&search={query}
2214
+ results_xpath: (//div[@class="event-list"])[1]/div[@class="event"]
2215
+ url_xpath: ./h4/a[2]/@href
2216
+ title_xpath: ./h4/a[2]
2217
+ content_xpath: ./p
2218
+ first_page_num: 1
2219
+ categories: [it, repos]
2220
+ disabled: true
2221
+ about:
2222
+ website: https://sr.ht
2223
+ wikidata_id: Q78514485
2224
+ official_api_documentation: https://man.sr.ht/
2225
+ use_official_api: false
2226
+ require_api_key: false
2227
+ results: HTML
2228
+
2229
+ - name: goo
2230
+ shortcut: goo
2231
+ engine: xpath
2232
+ paging: true
2233
+ search_url: https://search.goo.ne.jp/web.jsp?MT={query}&FR={pageno}0
2234
+ url_xpath: //div[@class="result"]/p[@class='title fsL1']/a/@href
2235
+ title_xpath: //div[@class="result"]/p[@class='title fsL1']/a
2236
+ content_xpath: //p[contains(@class,'url fsM')]/following-sibling::p
2237
+ first_page_num: 0
2238
+ categories: [general, web]
2239
+ disabled: true
2240
+ timeout: 4.0
2241
+ about:
2242
+ website: https://search.goo.ne.jp
2243
+ wikidata_id: Q249044
2244
+ use_official_api: false
2245
+ require_api_key: false
2246
+ results: HTML
2247
+ language: ja
2248
+
2249
+ - name: bt4g
2250
+ engine: bt4g
2251
+ shortcut: bt4g
2252
+
2253
+ - name: pkg.go.dev
2254
+ engine: xpath
2255
+ shortcut: pgo
2256
+ search_url: https://pkg.go.dev/search?limit=100&m=package&q={query}
2257
+ results_xpath: /html/body/main/div[contains(@class,"SearchResults")]/div[not(@class)]/div[@class="SearchSnippet"]
2258
+ url_xpath: ./div[@class="SearchSnippet-headerContainer"]/h2/a/@href
2259
+ title_xpath: ./div[@class="SearchSnippet-headerContainer"]/h2/a
2260
+ content_xpath: ./p[@class="SearchSnippet-synopsis"]
2261
+ categories: [packages, it]
2262
+ timeout: 3.0
2263
+ disabled: true
2264
+ about:
2265
+ website: https://pkg.go.dev/
2266
+ use_official_api: false
2267
+ require_api_key: false
2268
+ results: HTML
2269
+
2270
+ # Doku engine lets you access to any Doku wiki instance:
2271
+ # A public one or a privete/corporate one.
2272
+ # - name: ubuntuwiki
2273
+ # engine: doku
2274
+ # shortcut: uw
2275
+ # base_url: 'https://doc.ubuntu-fr.org'
2276
+
2277
+ # Be careful when enabling this engine if you are
2278
+ # running a public instance. Do not expose any sensitive
2279
+ # information. You can restrict access by configuring a list
2280
+ # of access tokens under tokens.
2281
+ # - name: git grep
2282
+ # engine: command
2283
+ # command: ['git', 'grep', '{{QUERY}}']
2284
+ # shortcut: gg
2285
+ # tokens: []
2286
+ # disabled: true
2287
+ # delimiter:
2288
+ # chars: ':'
2289
+ # keys: ['filepath', 'code']
2290
+
2291
+ # Be careful when enabling this engine if you are
2292
+ # running a public instance. Do not expose any sensitive
2293
+ # information. You can restrict access by configuring a list
2294
+ # of access tokens under tokens.
2295
+ # - name: locate
2296
+ # engine: command
2297
+ # command: ['locate', '{{QUERY}}']
2298
+ # shortcut: loc
2299
+ # tokens: []
2300
+ # disabled: true
2301
+ # delimiter:
2302
+ # chars: ' '
2303
+ # keys: ['line']
2304
+
2305
+ # Be careful when enabling this engine if you are
2306
+ # running a public instance. Do not expose any sensitive
2307
+ # information. You can restrict access by configuring a list
2308
+ # of access tokens under tokens.
2309
+ # - name: find
2310
+ # engine: command
2311
+ # command: ['find', '.', '-name', '{{QUERY}}']
2312
+ # query_type: path
2313
+ # shortcut: fnd
2314
+ # tokens: []
2315
+ # disabled: true
2316
+ # delimiter:
2317
+ # chars: ' '
2318
+ # keys: ['line']
2319
+
2320
+ # Be careful when enabling this engine if you are
2321
+ # running a public instance. Do not expose any sensitive
2322
+ # information. You can restrict access by configuring a list
2323
+ # of access tokens under tokens.
2324
+ # - name: pattern search in files
2325
+ # engine: command
2326
+ # command: ['fgrep', '{{QUERY}}']
2327
+ # shortcut: fgr
2328
+ # tokens: []
2329
+ # disabled: true
2330
+ # delimiter:
2331
+ # chars: ' '
2332
+ # keys: ['line']
2333
+
2334
+ # Be careful when enabling this engine if you are
2335
+ # running a public instance. Do not expose any sensitive
2336
+ # information. You can restrict access by configuring a list
2337
+ # of access tokens under tokens.
2338
+ # - name: regex search in files
2339
+ # engine: command
2340
+ # command: ['grep', '{{QUERY}}']
2341
+ # shortcut: gr
2342
+ # tokens: []
2343
+ # disabled: true
2344
+ # delimiter:
2345
+ # chars: ' '
2346
+ # keys: ['line']
2347
+
2348
+ doi_resolvers:
2349
+ oadoi.org: 'https://oadoi.org/'
2350
+ doi.org: 'https://doi.org/'
2351
+ doai.io: 'https://dissem.in/'
2352
+ sci-hub.se: 'https://sci-hub.se/'
2353
+ sci-hub.st: 'https://sci-hub.st/'
2354
+ sci-hub.ru: 'https://sci-hub.ru/'
2355
+
2356
+ default_doi_resolver: 'oadoi.org'
searxng/uwsgi.ini ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [uwsgi]
2
+ # Who will run the code
3
+ uid = searxng
4
+ gid = searxng
5
+
6
+ # Number of workers (usually CPU count)
7
+ # default value: %k (= number of CPU core, see Dockerfile)
8
+ workers = %k
9
+
10
+ # Number of threads per worker
11
+ # default value: 4 (see Dockerfile)
12
+ threads = 4
13
+
14
+ # The right granted on the created socket
15
+ chmod-socket = 666
16
+
17
+ # Plugin to use and interpreter config
18
+ single-interpreter = true
19
+ master = true
20
+ plugin = python3
21
+ lazy-apps = true
22
+ enable-threads = 4
23
+
24
+ # Module to import
25
+ module = searx.webapp
26
+
27
+ # Virtualenv and python path
28
+ pythonpath = /usr/local/searxng/
29
+ chdir = /usr/local/searxng/searx/
30
+
31
+ # automatically set processes name to something meaningful
32
+ auto-procname = true
33
+
34
+ # Disable request logging for privacy
35
+ disable-logging = true
36
+ log-5xx = true
37
+
38
+ # Set the max size of a request (request-body excluded)
39
+ buffer-size = 8192
40
+
41
+ # No keep alive
42
+ # See https://github.com/searx/searx-docker/issues/24
43
+ add-header = Connection: close
44
+
45
+ # uwsgi serves the static files
46
+ static-map = /static=/usr/local/searxng/searx/static
47
+ # expires set to one day
48
+ static-expires = /* 86400
49
+ static-gzip-all = True
50
+ offload-threads = 4
src/agents/models.py CHANGED
@@ -12,7 +12,7 @@ MODEL_EMBED_NAME="text-embedding-ada-002"
12
 
13
  # Initialize the service
14
  service = AgentIntegrationService(
15
- model_llm_name = MODEL_SIMPLE_NAME,
16
  model_embed_name = MODEL_EMBED_NAME
17
  )
18
 
 
12
 
13
  # Initialize the service
14
  service = AgentIntegrationService(
15
+ model_simple_name = MODEL_SIMPLE_NAME,
16
  model_embed_name = MODEL_EMBED_NAME
17
  )
18
 
src/agents_framework/integrations.py CHANGED
@@ -27,7 +27,8 @@ OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
27
  paths = {
28
  "question_type_classification": "data/prompts/question_type_classification.txt",
29
  "questions_generation": "data/prompts/questions_generation.txt",
30
- "normal_conversation": "data/prompts/normal_conversation.txt"
 
31
  }
32
 
33
  # Load the data
@@ -36,8 +37,10 @@ data = get_data(paths)
36
 
37
 
38
  class AgentIntegrationService:
39
- def __init__(self, model_llm_name="gpt-3.5-turbo", model_complex_name="gpt4o", model_embed_name="text-embedding-ada-002") -> None:
40
- self.llm_model = ChatOpenAI(model=model_llm_name, temperature=0)
 
 
41
 
42
  self.embedding_model = OpenAIEmbeddings(model=model_embed_name, chunk_size=1)
43
  self.retriever_tool = load_retrieval_tool(self.embedding_model)
@@ -79,19 +82,30 @@ class AgentIntegrationService:
79
  locations_index = []
80
  print(questions)
81
  for question in questions:
82
- locations_index.append(self.retrieval_places(question))
83
  return locations_index
84
 
85
- def retrieval_places(self, query):
86
  response = self.qa_baseline.invoke({"query": query})
87
  location_index = response["source_documents"][0].metadata["seq_num"] - 1
88
  print(location_index)
89
  return location_index
90
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  def answer_normal(self, user_input: str, chat_history, model_name="gpt-3.5-turbo") -> str:
92
  """Extract the token name or name from the user input"""
93
  set_conversation = [("system", data["normal_conversation"])]
94
- print(chat_history)
95
  if chat_history and len(chat_history) > 0:
96
  for history in chat_history:
97
  set_conversation.append(("human", history['question']))
@@ -119,7 +133,9 @@ class AgentIntegrationService:
119
 
120
  def _route(self, question_type):
121
  match question_type:
122
- case "ask_locations_should_go":
123
  return self.answer_based_retrieval
124
  case "ask_personal":
125
- return self.answer_normal
 
 
 
27
  paths = {
28
  "question_type_classification": "data/prompts/question_type_classification.txt",
29
  "questions_generation": "data/prompts/questions_generation.txt",
30
+ "normal_conversation": "data/prompts/normal_conversation.txt",
31
+ "interpreter_web": "data/prompts/interpreter_web.txt"
32
  }
33
 
34
  # Load the data
 
37
 
38
 
39
  class AgentIntegrationService:
40
+ def __init__(self, model_simple_name="gpt-3.5-turbo", model_complex_name="gpt4o", model_embed_name="text-embedding-ada-002") -> None:
41
+ self.model_simple_name = model_simple_name
42
+ self.model_complex_name = model_complex_name
43
+ self.llm_model = ChatOpenAI(model=model_simple_name, temperature=0)
44
 
45
  self.embedding_model = OpenAIEmbeddings(model=model_embed_name, chunk_size=1)
46
  self.retriever_tool = load_retrieval_tool(self.embedding_model)
 
82
  locations_index = []
83
  print(questions)
84
  for question in questions:
85
+ locations_index.append(self._retrieval_places(question))
86
  return locations_index
87
 
88
+ def _retrieval_places(self, query):
89
  response = self.qa_baseline.invoke({"query": query})
90
  location_index = response["source_documents"][0].metadata["seq_num"] - 1
91
  print(location_index)
92
  return location_index
93
 
94
+ def answer_based_search(self, query):
95
+ results = self.search_api.results(
96
+ query,
97
+ num_results=5,
98
+ language = "en",
99
+ enabled_engines = ["google"],
100
+ engines=["google"],
101
+ disabled_engines = ['duckduckgo', 'brave'],
102
+ )
103
+ print(results)
104
+
105
+
106
  def answer_normal(self, user_input: str, chat_history, model_name="gpt-3.5-turbo") -> str:
107
  """Extract the token name or name from the user input"""
108
  set_conversation = [("system", data["normal_conversation"])]
 
109
  if chat_history and len(chat_history) > 0:
110
  for history in chat_history:
111
  set_conversation.append(("human", history['question']))
 
133
 
134
  def _route(self, question_type):
135
  match question_type:
136
+ case "plan_trip":
137
  return self.answer_based_retrieval
138
  case "ask_personal":
139
+ return self.answer_normal
140
+ case "search_web":
141
+ return self.answer_based_search
src/agents_framework/tools.py CHANGED
@@ -1,5 +1,6 @@
1
  import os
2
  import json
 
3
 
4
  from langchain.text_splitter import RecursiveCharacterTextSplitter
5
  from langchain_community.vectorstores import Chroma
@@ -8,12 +9,14 @@ from langchain.storage import LocalFileStore
8
  from langchain.storage._lc_store import create_kv_docstore
9
  from langchain.retrievers import ParentDocumentRetriever
10
  from langchain_core.prompts import ChatPromptTemplate
 
11
 
12
  from .utils import get_data
13
 
14
- api_key = os.getenv("OPENAI_API_KEY")
15
- os.environ["OPENAI_API_KEY"] = api_key
16
 
 
17
 
18
  PERSIST_DIRECTORY = "data/indexing/local_vectorstore"
19
  LOCAL_STORE = "data/indexing/local_docstore"
@@ -23,12 +26,16 @@ PROJECT_ROOT = "./" # insert your project root directory name here
23
 
24
  paths = {
25
  "question_type_classification": "data/prompts/question_type_classification.txt",
26
- "questions_generation": "data/prompts/questions_generation.txt"
 
27
  }
28
 
29
  # Load the data
30
  data = get_data(paths)
 
31
 
 
 
32
 
33
  def load_retrieval_tool(embedding_model):
34
  parent_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
@@ -53,6 +60,18 @@ def load_retrieval_tool(embedding_model):
53
  return retriever_tool
54
 
55
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  classifer_question_execution = ChatPromptTemplate.from_messages(
57
  [
58
  ("system", data['question_type_classification']),
@@ -66,4 +85,32 @@ create_questions_execution = ChatPromptTemplate.from_messages(
66
  ("system", data['questions_generation']),
67
  ("human", "{input}"),
68
  ]
69
- ) | ChatOpenAI(model="gpt-4o", temperature=0)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import os
2
  import json
3
+ import datetime
4
 
5
  from langchain.text_splitter import RecursiveCharacterTextSplitter
6
  from langchain_community.vectorstores import Chroma
 
9
  from langchain.storage._lc_store import create_kv_docstore
10
  from langchain.retrievers import ParentDocumentRetriever
11
  from langchain_core.prompts import ChatPromptTemplate
12
+ from langchain_community.utilities import SearxSearchWrapper
13
 
14
  from .utils import get_data
15
 
16
+ openai_api_key = os.getenv("OPENAI_API_KEY")
17
+ # SEARXNG_PORT = os.getenv("SEARXNG_PORT")
18
 
19
+ os.environ["OPENAI_API_KEY"] = openai_api_key
20
 
21
  PERSIST_DIRECTORY = "data/indexing/local_vectorstore"
22
  LOCAL_STORE = "data/indexing/local_docstore"
 
26
 
27
  paths = {
28
  "question_type_classification": "data/prompts/question_type_classification.txt",
29
+ "questions_generation": "data/prompts/questions_generation.txt",
30
+ "interpreter_web": "data/prompts/interpreter_web.txt"
31
  }
32
 
33
  # Load the data
34
  data = get_data(paths)
35
+ current_date = datetime.datetime.now().isoformat()
36
 
37
+ # Initial search api
38
+ # searxng_api = SearxSearchWrapper(searx_host=SEARXNG_PORT, k = 20)
39
 
40
  def load_retrieval_tool(embedding_model):
41
  parent_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
 
60
  return retriever_tool
61
 
62
 
63
+ def search_searxng_engine(query, engines: list=["google"], enabled_engines: list=["google", "apple_maps"]):
64
+ results = searxng_api.results(
65
+ query,
66
+ num_results=5,
67
+ language="en",
68
+ enabled_engines=enabled_engines,
69
+ engines=engines,
70
+ disabled_engines=['duckduckgo', 'brave'],
71
+ )
72
+ return results
73
+
74
+
75
  classifer_question_execution = ChatPromptTemplate.from_messages(
76
  [
77
  ("system", data['question_type_classification']),
 
85
  ("system", data['questions_generation']),
86
  ("human", "{input}"),
87
  ]
88
+ ) | ChatOpenAI(model="gpt-4o", temperature=0)
89
+
90
+
91
+ if __name__ == "__main__":
92
+
93
+ question = "Cho tôi vài khách sạn ở gần phố đi bộ Nguyễn Huệ"
94
+ results = search_searxng_engine(question)
95
+
96
+ contexts = f"Question of user: {question}\n\n"
97
+ contexts += "There is some contextual information from the web: \n\n"
98
+ for result in results:
99
+ contexts += f"{result['snippet']}\n\n"
100
+
101
+
102
+ def generate_response(context: str) -> str:
103
+ prompt = data["interpreter_web"].format(context=context, date=current_date)
104
+ print(prompt)
105
+ location_answer_execution = ChatPromptTemplate.from_messages(
106
+ [
107
+ ("human", "{input}"),
108
+ ]
109
+ ) | ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
110
+
111
+
112
+ response = location_answer_execution.invoke(input=prompt).content
113
+ return response.strip()
114
+
115
+ response = generate_response(contexts)
116
+ print(response)
src/trip_advisor.egg-info/PKG-INFO ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.1
2
+ Name: trip-advisor
3
+ Version: 0.0.2
4
+ Summary: microservices for recommendation location agents
5
+ Home-page: UNKNOWN
6
+ Author: Phuc Phan
7
+ Author-email: phanphuc1100@gmail.com
8
+ Maintainer: Phuc Phan
9
+ Maintainer-email: phanphuc1100@gmail.com
10
+ License: UNKNOWN
11
+ Platform: UNKNOWN
12
+
13
+ UNKNOWN
14
+
src/trip_advisor.egg-info/SOURCES.txt ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ README.md
2
+ setup.py
3
+ src/data_processing/__init__.py
4
+ src/data_processing/combined_data.py
5
+ src/data_processing/crawling_foody_vung_tau.py
6
+ src/data_processing/preprocess_data.py
7
+ src/trip_advisor.egg-info/PKG-INFO
8
+ src/trip_advisor.egg-info/SOURCES.txt
9
+ src/trip_advisor.egg-info/dependency_links.txt
10
+ src/trip_advisor.egg-info/top_level.txt
src/trip_advisor.egg-info/dependency_links.txt ADDED
@@ -0,0 +1 @@
 
 
1
+
src/trip_advisor.egg-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ data_processing