diff --git a/configs/config.yaml b/configs/config.yaml
index 32c2ca7..49c686c 100644
--- a/configs/config.yaml
+++ b/configs/config.yaml
@@ -1,5 +1,5 @@
# =================== Lord Of Large Language Multimodal Systems Configuration file ===========================
-version: 153
+version: 154
# video viewing and news recovering
last_viewed_video: null
@@ -338,6 +338,29 @@ negative_boost: null
current_language: english
fun_mode: false
think_first_mode: false
+thinking_prompt: "
+ Begin by thoroughly analyzing the user's request.
+ If the user is seeking general information that does not require an internet search and you are confident in your knowledge, prepare a direct response.
+ If the user is asking for general information that requires an internet search, use any relevant information from the provided context to formulate your answer.
+ If there is no relevant information in the context, politely ask the user to enable internet search.
+
+ When faced with riddles or math problems, employ rigorous hypothesis testing and analysis.
+ For tasks or requests that require planning, break them down into logical steps and prepare your response accordingly.
+ If the conversation is casual, refrain from using the think-first process.
+
+ Continue thinking until you arrive at a satisfactory answer.
+ Evaluate potential errors and strive to avoid them.
+ Consider multiple expert perspectives and approaches to ensure a well-rounded response.
+ If necessary, revisit your initial assumptions and revise them based on new insights.
+ Ensure that your answer is clear, concise, and free of ambiguity.
+ If the question is ambiguous, ask for clarification before providing a response.
+ If you are unsure about any aspect of the question, admit your uncertainty and offer to seek additional information.
+
+ "
+
+
+
+
function_calls: []
# { name: the function name,
# value: the function name without spaces,
@@ -349,5 +372,3 @@ function_calls: []
# webui configurations
show_code_of_conduct: true
activate_audio_infos: true
-
-
diff --git a/lollms/app.py b/lollms/app.py
index 97cb84c..1f30d11 100644
--- a/lollms/app.py
+++ b/lollms/app.py
@@ -1041,22 +1041,7 @@ Fun mode activated. In this mode you must answer in a funny playful way. Do not
if self.config.think_first_mode:
think_first_mode=f"""{self.system_custom_header('important information')}
- Use a think first process to answer the user:
-
- Ask yourself about the user's request and answer it with logical details.
- If the user is requesting general information that does not require internet search and you are confident about it, then prepare to answer directly.
- If the user is requesting general information that does require internet search and you have in the context enough information to answer, then use that data to answer.
- If the user is requesting general information that does require internet search but you do not have any information, then ask him to activate internet search.
-
- if the user is posing a riddle or asking a math question, make sure you use regourous math hypothisis, testing and analysis.
- If the user is requesting to perform a task, then plan it through steps and prepare to answer
- If the user is just discussing casually, do not perform the think first process
-
- Make sure you continue thinking until you find a satisfactory answer
- Assess any potential errors you may make
-
-
- After thinking you can answer the user.
+{self.config.thinking_prompt}
"""
n_think_first_mode = len(self.model.tokenize(positive_boost))
else:
diff --git a/lollms/configs/config.yaml b/lollms/configs/config.yaml
index 32c2ca7..39b801c 100644
--- a/lollms/configs/config.yaml
+++ b/lollms/configs/config.yaml
@@ -1,5 +1,5 @@
# =================== Lord Of Large Language Multimodal Systems Configuration file ===========================
-version: 153
+version: 154
# video viewing and news recovering
last_viewed_video: null
@@ -338,6 +338,26 @@ negative_boost: null
current_language: english
fun_mode: false
think_first_mode: false
+thinking_prompt: "Use a think first process to answer the user:
+
+ Ask yourself about the user's request and answer it with logical details.
+ If the user is requesting general information that does not require internet search and you are confident about it, then prepare to answer directly.
+ If the user is requesting general information that does require internet search and you have in the context enough information to answer, then use that data to answer.
+ If the user is requesting general information that does require internet search but you do not have any information, then ask him to activate internet search.
+
+ if the user is posing a riddle or asking a math question, make sure you use regourous math hypothisis, testing and analysis.
+ If the user is requesting to perform a task, then plan it through steps and prepare to answer
+ If the user is just discussing casually, do not perform the think first process
+
+ Make sure you continue thinking until you find a satisfactory answer
+ Assess any potential errors you may make
+
+
+ After thinking you can answer the user."
+
+
+
+
function_calls: []
# { name: the function name,
# value: the function name without spaces,
@@ -349,5 +369,3 @@ function_calls: []
# webui configurations
show_code_of_conduct: true
activate_audio_infos: true
-
-
diff --git a/lollms/server/assets/thinking_methods.yaml b/lollms/server/assets/thinking_methods.yaml
new file mode 100644
index 0000000..8d0eee9
--- /dev/null
+++ b/lollms/server/assets/thinking_methods.yaml
@@ -0,0 +1,32 @@
+- name: "Basic Thinking"
+ description: "A simple step-by-step thinking process"
+ author: "ParisNeo"
+ prompt: "\n1. First, I analyze the problem\n2. Then, I break it down\n3. Finally, I solve it\n"
+
+- name: "Advanced Analysis"
+ description: "A more detailed analytical approach"
+ author: "ParisNeo"
+ prompt: "\n1. Problem identification\n2. Context analysis\n3. Solution brainstorming\n4. Implementation planning\n"
+
+- name: "Lollms main thinking prompt"
+ description: "A specific advanced thinking methodology"
+ author: "ParisNeo, enhancede by Bill"
+ prompt: "
+ Begin by thoroughly analyzing the user's request.
+ If the user is seeking general information that does not require an internet search and you are confident in your knowledge, prepare a direct response.
+ If the user is asking for general information that requires an internet search, use any relevant information from the provided context to formulate your answer.
+ If there is no relevant information in the context, politely ask the user to enable internet search.
+
+ When faced with riddles or math problems, employ rigorous hypothesis testing and analysis.
+ For tasks or requests that require planning, break them down into logical steps and prepare your response accordingly.
+ If the conversation is casual, refrain from using the think-first process.
+
+ Continue thinking until you arrive at a satisfactory answer.
+ Evaluate potential errors and strive to avoid them.
+ Consider multiple expert perspectives and approaches to ensure a well-rounded response.
+ If necessary, revisit your initial assumptions and revise them based on new insights.
+ Ensure that your answer is clear, concise, and free of ambiguity.
+ If the question is ambiguous, ask for clarification before providing a response.
+ If you are unsure about any aspect of the question, admit your uncertainty and offer to seek additional information.
+
+ "
diff --git a/lollms/server/endpoints/lollms_thinking.py b/lollms/server/endpoints/lollms_thinking.py
new file mode 100644
index 0000000..a6ec7b2
--- /dev/null
+++ b/lollms/server/endpoints/lollms_thinking.py
@@ -0,0 +1,100 @@
+"""
+project: lollms
+file: lollms_thinking.py
+author: ParisNeo
+description:
+ This module contains a set of FastAPI routes that provide information about the Lord of Large Language and Multimodal Systems (LoLLMs) Web UI
+ application. These routes are specific to bindings
+
+"""
+from fastapi import APIRouter, Request, HTTPException
+from pydantic import BaseModel, Field
+import pkg_resources
+from lollms.server.elf_server import LOLLMSElfServer
+from lollms.binding import BindingBuilder, InstallOption
+from ascii_colors import ASCIIColors
+from lollms.utilities import load_config, trace_exception, gc
+from lollms.security import sanitize_path_from_endpoint, sanitize_path, check_access
+from lollms.security import check_access
+from pathlib import Path
+from typing import List, Any
+import json
+import os
+# ----------------------------------- Personal files -----------------------------------------
+
+class ClientAuthentication(BaseModel):
+ client_id: str = Field(...)
+
+class ReloadBindingParams(BaseModel):
+ binding_name: str = Field(..., min_length=1, max_length=50)
+
+class BindingInstallParams(BaseModel):
+ client_id: str
+ name: str = Field(..., min_length=1, max_length=50)
+
+
+# ----------------------- Defining router and main class ------------------------------
+router = APIRouter()
+lollmsElfServer = LOLLMSElfServer.get_instance()
+
+
+# ----------------------------------- Endpoints -----------------------------------------
+
+@router.post("/get_thinking_methods")
+def get_thinking_methods(request: ClientAuthentication):
+ """
+ Retrieves the thinking methods from the thinking_methods.yaml file
+
+ Args:
+ request (ClientAuthentication): Client authentication information
+
+ Returns:
+ dict: Dictionary containing the thinking methods
+
+ Raises:
+ HTTPException: If file not found or invalid format
+ """
+ try:
+ check_access(lollmsElfServer, request.client_id)
+ # Get the current file's directory
+ current_dir = Path(__file__).parent
+ # Go up one level and construct path to thinking_methods.yaml
+ yaml_path = current_dir.parent / "assets" / "thinking_methods.yaml"
+
+ # Check if file exists
+ if not yaml_path.exists():
+ raise HTTPException(
+ status_code=404,
+ detail="Thinking methods configuration file not found"
+ )
+
+ # Load yaml file
+ import yaml
+ with open(yaml_path, 'r', encoding='utf-8') as f:
+ thinking_methods = yaml.safe_load(f)
+
+ # Validate format
+ if not isinstance(thinking_methods, list):
+ raise HTTPException(
+ status_code=400,
+ detail="Invalid thinking methods format - expected list"
+ )
+
+ for method in thinking_methods:
+ if not all(key in method for key in ['name', 'description', 'prompt']):
+ raise HTTPException(
+ status_code=400,
+ detail="Invalid thinking method format - missing required fields"
+ )
+
+ return {
+ "status": "success",
+ "thinking_methods": thinking_methods
+ }
+
+ except Exception as e:
+ trace_exception(e)
+ raise HTTPException(
+ status_code=500,
+ detail=f"Error loading thinking methods: {str(e)}"
+ )