Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 24 additions & 5 deletions src/leettools/chat/_impl/duckdb/history_manager_duckdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -838,7 +838,9 @@ def run_query_item(
query_id=chat_query_item.query_id,
)
try:
query_logger.info(f"[Status]Query started: {chat_query_item.query_content}")
query_logger.info(
f"[Status] Query started: {chat_query_item.query_content}"
)
chat_query_result_create: ChatQueryResultCreate = (
self._execute_flow_for_query(
org=org,
Expand All @@ -849,25 +851,42 @@ def run_query_item(
)
)
if chat_query_result_create is not None:
query_logger.info("[Status]Saving results.")
query_logger.info("[Status] Saving results.")
chat_query_result = self._add_answers_to_chat(
org=org,
kb=kb,
username=user.username,
chat_query_item=chat_query_item,
chat_query_result_create=chat_query_result_create,
)
query_logger.info("[Status]Query completed.")
query_logger.info("[Status] Query completed.")
self._update_kb_timestamp(org, kb)
return chat_query_result
else:
# chat_query_result_create is None
query_logger.info("[Status]Query failed or not completed.")
query_logger.info("[Status] Query failed or not completed.")
return None
finally:
end_time = time.perf_counter()
elapsed_time = end_time - start_time
query_logger.info(f"[Query Runtime]{elapsed_time} seconds.")

# Convert to minutes, seconds, milliseconds
minutes = int(elapsed_time // 60)
seconds = int(elapsed_time % 60)
milliseconds = int((elapsed_time * 1000) % 1000)

runtime_parts = []
if minutes > 0:
runtime_parts.append(f"{minutes} minutes")
if seconds > 0:
runtime_parts.append(f"{seconds} seconds")
if (
milliseconds > 0 or not runtime_parts
): # Show ms if no other units or has ms
runtime_parts.append(f"{milliseconds} milliseconds")

runtime_str = " ".join(runtime_parts)
query_logger.info(f"[Runtime] {runtime_str}")
remove_logger(logger_name)

def update_ch_entry(self, ch_update: CHUpdate) -> Optional[ChatHistory]:
Expand Down
2 changes: 1 addition & 1 deletion src/leettools/cli/llm/llm_inference.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ def inference_func(
if inference_section is None:
raise exceptions.UnexpectedCaseException("Inference section is None.")

display_logger.info(f"[Status]Running inference for query {query}.")
display_logger.info(f"[Status] Running inference for query {query}.")

llm_cli_tool = LLMCliTool(context, user, inference_section, display_logger)

Expand Down
4 changes: 2 additions & 2 deletions src/leettools/flow/iterators/extract_kb.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def run(
display_logger = exec_info.display_logger

display_logger.info(
"[Status]Extracting information from documents in the knowledgebase ..."
"[Status] Extracting information from documents in the knowledgebase ..."
)

if save_to_backend:
Expand Down Expand Up @@ -145,7 +145,7 @@ def run(
)

display_logger.info(
f"[Status]ExtractKB from document {document.original_uri} ..."
f"[Status] ExtractKB from document {document.original_uri} ..."
)
extracted_obj_list = steps.StepExtractInfo.run_step(
exec_info=exec_info,
Expand Down
2 changes: 1 addition & 1 deletion src/leettools/flow/iterators/summarize.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def run(
url.
"""
display_logger = exec_info.display_logger
display_logger.info("[Status]Summarizing documents for metadata ...")
display_logger.info("[Status] Summarizing documents for metadata ...")

successful_documents: Dict[str, Document] = {}

Expand Down
2 changes: 1 addition & 1 deletion src/leettools/flow/steps/step_extract_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def run_step(
"""
display_logger = exec_info.display_logger
display_logger.info(
f"[Status]StepExtractInfo: extract {model_class_name} from content."
f"[Status] StepExtractInfo: extract {model_class_name} from content."
)
flow_options = exec_info.flow_options

Expand Down
2 changes: 1 addition & 1 deletion src/leettools/flow/steps/step_gen_intro.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def _step_gen_intro_section(
) -> ArticleSection:

display_logger = exec_info.display_logger
display_logger.info("[Status]Generating introduction.")
display_logger.info("[Status] Generating introduction.")

query = exec_info.target_chat_query_item.query_content

Expand Down
2 changes: 1 addition & 1 deletion src/leettools/flow/steps/step_gen_search_phrases.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def run_step(
query = exec_info.target_chat_query_item.query_content

display_logger = exec_info.display_logger
display_logger.info("[Status]Generating web search phrases.")
display_logger.info("[Status] Generating web search phrases.")

search_lang = flow_utils.get_search_lang(
exec_info=exec_info, query_metadata=query_metadata
Expand Down
2 changes: 1 addition & 1 deletion src/leettools/flow/steps/step_gen_section.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def run_step(
- The generated section.
"""
display_logger = exec_info.display_logger
display_logger.info(f"[Status]Generating section {section_plan.title}.")
display_logger.info(f"[Status] Generating section {section_plan.title}.")

api_caller = exec_info.get_inference_caller()

Expand Down
2 changes: 1 addition & 1 deletion src/leettools/flow/steps/step_inference.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def run_step(
if inference_section is None:
raise UnexpectedCaseException("Inference section is None.")

display_logger.info(f"[Status]Running inference for query {query}.")
display_logger.info(f"[Status] Running inference for query {query}.")

inference = get_inference_by_strategy(
context, user, inference_section, display_logger
Expand Down
8 changes: 5 additions & 3 deletions src/leettools/flow/steps/step_intention.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def _run_intention(
query_metadata = ChatQueryMetadata(intention=DEFAULT_INTENTION)
if intention_section is None:
display_logger.info(
"Intention section is not provided. Using the default intention."
"[Update] Intention section is not provided. Using the default intention."
)
return query_metadata

Expand All @@ -62,7 +62,7 @@ def _run_intention(
)
return query_metadata

display_logger.info("[Status]Getting intention for the query.")
display_logger.info("[Status] Getting intention for the query.")

intention_getter = get_intention_getter_by_strategy(
context=context,
Expand All @@ -71,5 +71,7 @@ def _run_intention(
display_logger=display_logger,
)
query_metadata = intention_getter.get_intention(query)
display_logger.info(f"The intention for original query is: {query_metadata}")
display_logger.info(
f"[Update] The intention for original query is: {query_metadata}"
)
return query_metadata
10 changes: 7 additions & 3 deletions src/leettools/flow/steps/step_plan_topic.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from typing import ClassVar, Dict, List, Optional, Type

from leettools.common import exceptions
from leettools.common.logging.event_logger import EventLogger
from leettools.common.utils import config_utils, template_eval
from leettools.core.consts import flow_option
from leettools.core.schemas.chat_query_metadata import ChatQueryMetadata
Expand Down Expand Up @@ -148,7 +149,7 @@ def _step_plan_topic_for_style(
- The list of topics.
"""
display_logger = exec_info.display_logger
display_logger.info("[Status]Planning topics for research article.")
display_logger.info("[Status] Planning topics for research article.")

if num_of_sections is None or num_of_sections == 0:
num_of_section_instruction = "generate a list of most relevant topics"
Expand Down Expand Up @@ -238,7 +239,7 @@ def _step_plan_topic_for_style(
override_model_name=planning_model,
)

return _parse_topic_list(response_str)
return _parse_topic_list(response_str, display_logger)
except Exception as e:
display_logger.error(f"Failed to generate topic list: {e}")
if response_str is not None:
Expand All @@ -248,7 +249,7 @@ def _step_plan_topic_for_style(
)


def _parse_topic_list(response_str: str) -> TopicList:
def _parse_topic_list(response_str: str, display_logger: EventLogger) -> TopicList:
"""Parse a string response into a TopicList object.

Args:
Expand Down Expand Up @@ -303,4 +304,7 @@ def _parse_topic_list(response_str: str) -> TopicList:
)

topic_list = TopicList.model_validate(final_obj)
display_logger.info(
f"[Update] The topic list is:\n{json.dumps(final_obj, indent=2)}"
)
return topic_list
6 changes: 3 additions & 3 deletions src/leettools/flow/steps/step_query_rewrite.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def run_step(
"""
display_logger = exec_info.display_logger
display_logger.info(
f"[Status]Rewrite query: {exec_info.target_chat_query_item.query_content}"
f"[Status] Rewrite query: {exec_info.target_chat_query_item.query_content}"
)
rewrite_section = exec_info.strategy.strategy_sections.get(
StrategySectionName.REWRITE, None
Expand Down Expand Up @@ -69,7 +69,7 @@ def _step_run_rewriter(
display_logger.info("Rewrite strategy is disabled. Skip rewriting.")
return Rewrite(rewritten_question=rewritten_query)

display_logger.info("[Status]Rewriting the query.")
display_logger.info("[Status] Rewriting the query.")

query_rewriter = get_query_rewriter_by_strategy(
context=context,
Expand All @@ -83,5 +83,5 @@ def _step_run_rewriter(
query_item=query_item,
query_metadata=query_metadata,
)
display_logger.info(f"Rewritten result is: {rewrite}")
display_logger.info(f"[Update] Rewritten result is: {rewrite}")
return rewrite
2 changes: 1 addition & 1 deletion src/leettools/flow/steps/step_rerank.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def _run_rerank(
display_logger.info(f"Rerank is disabled. Skip reranking.")
return top_ranked_result_segments

display_logger.info("[Status]Rerank the search results.")
display_logger.info("[Status] Rerank the search results.")
try:
original_top_ranked_result_segments = top_ranked_result_segments.copy()
reranker = create_reranker_by_strategy(
Expand Down
2 changes: 1 addition & 1 deletion src/leettools/flow/steps/step_scrape_urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ def run_step(
kb = exec_info.kb
query = exec_info.target_chat_query_item.query_content

display_logger.info(f"[Status]Scraping {len(links)} URLs.")
display_logger.info(f"[Status] Scraping {len(links)} URLs.")

docsink_create_list = web_searcher.scrape_urls_to_docsinks(
query=query,
Expand Down
11 changes: 5 additions & 6 deletions src/leettools/flow/steps/step_search_medium.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import json
import requests

from datetime import datetime, timezone

from concurrent.futures import ThreadPoolExecutor
from datetime import datetime, timezone
from functools import partial
from typing import ClassVar, Dict, List, Optional, Type

import requests

from leettools.common import exceptions
from leettools.common.logging import EventLogger, logger
from leettools.flow import flow_option_items
Expand All @@ -15,8 +14,8 @@
from leettools.flow.flow_option_items import FlowOptionItem
from leettools.flow.schemas.medium_article import MediumArticle
from leettools.flow.step import AbstractStep
from leettools.web.web_searcher import WebSearcher
from leettools.web.web_scraper import WebScraper
from leettools.web.web_searcher import WebSearcher

ID_ATTR = "id"
SNIPPET_ATTR = "body"
Expand Down Expand Up @@ -78,7 +77,7 @@ def run_step(
if search_keywords is None:
search_keywords = exec_info.target_chat_query_item.query_content

display_logger.info("[Status]Start the medium search pipeline ...")
display_logger.info("[Status] Start the medium search pipeline ...")
medium_articles = _run_medium_search_pipeline(exec_info, search_keywords)
display_logger.info(
f"Successfully find {len(medium_articles)} "
Expand Down
6 changes: 3 additions & 3 deletions src/leettools/flow/steps/step_search_to_docsource.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ def run_step(
assert len(updated_docsources) == 1
return updated_docsources[0]

display_logger.info("[Status]Start the search to docsource pipeline ...")
display_logger.info("[Status] Start the search to docsource pipeline ...")
try:
# if the kb.auto_schedule is False, we should run the process manually
success_documents = _run_web_search_pipeline(
Expand All @@ -145,7 +145,7 @@ def run_step(
search_keywords=search_keywords,
)
display_logger.info(
f"Successfully ingested {len(success_documents)} documents from search."
f"[Update] Successfully ingested {len(success_documents)} documents from search."
)
return docsource
except Exception as e:
Expand Down Expand Up @@ -232,7 +232,7 @@ def _create_docsrc_for_search(
display_logger=display_logger,
)

display_logger.info(f"[Status]Searching the web with {retriever_type} ...")
display_logger.info(f"[Status] Searching the web with {retriever_type} ...")

# use yyyy-mm-dd-hh-mm-ss to the URI to distinguish different searches
timestamp = time_utils.current_datetime().strftime("%Y-%m-%d-%H-%M-%S")
Expand Down
2 changes: 1 addition & 1 deletion src/leettools/flow/steps/step_summarize.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ def run_step(
context = exec_info.context
document_store = context.get_repo_manager().get_document_store()

display_logger.info(f"[Status]Summarizing document {document.original_uri}.")
display_logger.info(f"[Status] Summarizing document {document.original_uri}.")

if document.embed_status != DocSourceStatus.COMPLETED:
display_logger.info(
Expand Down
2 changes: 1 addition & 1 deletion src/leettools/flow/steps/step_vectdb_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def run_step(
flow_options = query_options.flow_options
query = exec_info.target_chat_query_item.query_content

display_logger.info(f"[Status]Search in KB {kb.name} for related segments.")
display_logger.info(f"[Status] Search in KB {kb.name} for related segments.")

search_section = exec_info.strategy.strategy_sections.get(
StrategySectionName.SEARCH, None
Expand Down
5 changes: 5 additions & 0 deletions src/leettools/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,11 @@ class SystemSettings(BaseModel):
description="The default batch size for inserting embeddings into the database",
)

display_log_status_flag: str = Field(
"status,thinking,update,runtime",
description="The default log status flag for the system",
)

DEFAULT_FLOW_TYPE: str = Field(
"answer", description="The default flow type for the system"
)
Expand Down
Loading
Loading