Bladeren bron

Fix variable typo (#8084)

Nam Vu 7 maanden geleden
bovenliggende
commit
2d7954c7da
100 gewijzigde bestanden met toevoegingen van 233 en 232 verwijderingen
  1. 2 2
      api/configs/feature/__init__.py
  2. 1 1
      api/constants/recommended_apps.json
  3. 1 1
      api/controllers/console/datasets/datasets.py
  4. 1 1
      api/controllers/service_api/dataset/segment.py
  5. 1 1
      api/core/helper/position_helper.py
  6. 1 1
      api/core/indexing_runner.py
  7. 1 1
      api/core/llm_generator/prompts.py
  8. 2 2
      api/core/model_runtime/docs/en_US/schema.md
  9. 1 1
      api/core/model_runtime/model_providers/__base/tts_model.py
  10. 1 1
      api/core/model_runtime/model_providers/azure_openai/llm/llm.py
  11. 1 1
      api/core/model_runtime/model_providers/baichuan/llm/llm.py
  12. 1 1
      api/core/model_runtime/model_providers/baichuan/text_embedding/text_embedding.py
  13. 3 3
      api/core/model_runtime/model_providers/bedrock/llm/llm.py
  14. 3 3
      api/core/model_runtime/model_providers/bedrock/text_embedding/text_embedding.py
  15. 3 3
      api/core/model_runtime/model_providers/google/llm/llm.py
  16. 1 1
      api/core/model_runtime/model_providers/minimax/llm/llm.py
  17. 1 0
      api/core/model_runtime/model_providers/novita/llm/llm.py
  18. 4 4
      api/core/model_runtime/model_providers/oci/llm/llm.py
  19. 1 1
      api/core/model_runtime/model_providers/openai/llm/llm.py
  20. 4 4
      api/core/model_runtime/model_providers/tencent/speech2text/flash_recognizer.py
  21. 3 3
      api/core/model_runtime/model_providers/vertex_ai/llm/llm.py
  22. 4 4
      api/core/model_runtime/model_providers/zhipuai/zhipuai_sdk/core/_http_client.py
  23. 1 1
      api/core/rag/cleaner/unstructured/unstructured_non_ascii_chars_cleaner.py
  24. 12 12
      api/core/rag/datasource/retrieval_service.py
  25. 0 0
      api/core/rag/extractor/blob/blob.py
  26. 4 4
      api/core/rag/extractor/notion_extractor.py
  27. 1 1
      api/core/rag/extractor/pdf_extractor.py
  28. 1 1
      api/core/rag/index_processor/index_processor_base.py
  29. 3 3
      api/core/rag/index_processor/processor/paragraph_index_processor.py
  30. 3 3
      api/core/rag/index_processor/processor/qa_index_processor.py
  31. 10 10
      api/core/rag/retrieval/dataset_retrieval.py
  32. 0 0
      api/core/rag/retrieval/retrieval_methods.py
  33. 1 1
      api/core/tools/provider/builtin/dalle/dalle.yaml
  34. 1 1
      api/core/tools/provider/builtin/dalle/tools/dalle2.py
  35. 1 1
      api/core/tools/provider/builtin/dalle/tools/dalle3.py
  36. 1 1
      api/core/tools/provider/builtin/github/github.py
  37. 1 1
      api/core/tools/provider/builtin/github/tools/github_repositories.py
  38. 2 2
      api/core/tools/provider/builtin/gitlab/tools/gitlab_commits.py
  39. 1 1
      api/core/tools/provider/builtin/gitlab/tools/gitlab_commits.yaml
  40. 1 1
      api/core/tools/provider/builtin/openweather/tools/weather.py
  41. 8 8
      api/core/tools/provider/builtin/spark/tools/spark_img_generation.py
  42. 1 1
      api/core/tools/provider/builtin/spider/tools/scraper_crawler.py
  43. 3 3
      api/core/tools/tool/dataset_retriever/dataset_multi_retriever_tool.py
  44. 3 3
      api/core/tools/tool/dataset_retriever/dataset_retriever_tool.py
  45. 8 8
      api/core/tools/tool/dataset_retriever_tool.py
  46. 13 13
      api/core/tools/utils/web_reader_tool.py
  47. 1 1
      api/core/workflow/entities/variable_pool.py
  48. 1 1
      api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py
  49. 2 2
      api/events/event_handlers/__init__.py
  50. 0 0
      api/events/event_handlers/deduct_quota_when_message_created.py
  51. 0 0
      api/events/event_handlers/update_provider_last_used_at_when_message_created.py
  52. 1 1
      api/models/dataset.py
  53. 1 1
      api/services/dataset_service.py
  54. 2 2
      api/services/hit_testing_service.py
  55. 1 1
      api/tasks/sync_website_document_indexing_task.py
  56. 8 8
      api/tests/integration_tests/model_runtime/baichuan/test_llm.py
  57. 1 1
      api/tests/integration_tests/model_runtime/google/test_llm.py
  58. 1 1
      api/tests/integration_tests/model_runtime/xinference/test_llm.py
  59. 1 1
      api/tests/integration_tests/vdb/pgvecto_rs/test_pgvecto_rs.py
  60. 6 6
      docker/startupscripts/init.sh
  61. 1 1
      sdks/nodejs-client/README.md
  62. 1 1
      web/app/(commonLayout)/app/(appDetailLayout)/[appId]/layout.tsx
  63. 2 2
      web/app/(commonLayout)/apps/AppCard.tsx
  64. 2 2
      web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/layout.tsx
  65. 1 1
      web/app/(commonLayout)/datasets/template/template.en.mdx
  66. 1 1
      web/app/(commonLayout)/datasets/template/template.zh.mdx
  67. 4 4
      web/app/components/app-sidebar/app-info.tsx
  68. 2 2
      web/app/components/app/annotation/index.tsx
  69. 2 2
      web/app/components/app/annotation/view-annotation-modal/index.tsx
  70. 1 1
      web/app/components/app/configuration/config-prompt/advanced-prompt-input.tsx
  71. 3 3
      web/app/components/app/configuration/config-prompt/confirm-add-var/index.tsx
  72. 0 0
      web/app/components/app/configuration/config-prompt/conversation-history/edit-modal.tsx
  73. 0 0
      web/app/components/app/configuration/config-prompt/conversation-history/history-panel.tsx
  74. 2 2
      web/app/components/app/configuration/config-prompt/simple-prompt-input.tsx
  75. 2 2
      web/app/components/app/configuration/config/agent/agent-setting/index.tsx
  76. 3 3
      web/app/components/app/configuration/config/assistant-type-picker/index.tsx
  77. 2 2
      web/app/components/app/configuration/config/feature/use-feature.tsx
  78. 4 4
      web/app/components/app/configuration/config/index.tsx
  79. 2 2
      web/app/components/app/configuration/dataset-config/params-config/index.tsx
  80. 1 1
      web/app/components/app/configuration/dataset-config/select-dataset/index.tsx
  81. 2 2
      web/app/components/app/configuration/dataset-config/settings-modal/index.tsx
  82. 1 1
      web/app/components/app/configuration/debug/debug-with-multiple-model/chat-item.tsx
  83. 1 1
      web/app/components/app/configuration/debug/debug-with-single-model/index.tsx
  84. 1 1
      web/app/components/app/configuration/features/chat-group/opening-statement/index.tsx
  85. 2 2
      web/app/components/app/configuration/features/experience-enhance-group/index.tsx
  86. 0 0
      web/app/components/app/configuration/features/experience-enhance-group/more-like-this/index.tsx
  87. 1 1
      web/app/components/app/configuration/index.tsx
  88. 5 5
      web/app/components/app/configuration/toolbox/moderation/moderation-setting-modal.tsx
  89. 3 3
      web/app/components/app/configuration/tools/external-data-tool-modal.tsx
  90. 2 2
      web/app/components/app/create-app-modal/index.tsx
  91. 2 2
      web/app/components/app/log/index.tsx
  92. 3 3
      web/app/components/app/log/list.tsx
  93. 7 7
      web/app/components/app/text-generate/item/index.tsx
  94. 3 3
      web/app/components/app/type-selector/index.tsx
  95. 2 2
      web/app/components/app/workflow-log/index.tsx
  96. 1 1
      web/app/components/base/agent-log-modal/detail.tsx
  97. 2 2
      web/app/components/base/block-input/index.tsx
  98. 4 4
      web/app/components/base/chat/chat-with-history/hooks.tsx
  99. 4 4
      web/app/components/base/chat/chat/citation/index.tsx
  100. 4 4
      web/app/components/base/chat/chat/hooks.ts

+ 2 - 2
api/configs/feature/__init__.py

@@ -46,7 +46,7 @@ class CodeExecutionSandboxConfig(BaseSettings):
     """
 
     CODE_EXECUTION_ENDPOINT: HttpUrl = Field(
-        description="endpoint URL of code execution servcie",
+        description="endpoint URL of code execution service",
         default="http://sandbox:8194",
     )
 
@@ -415,7 +415,7 @@ class MailConfig(BaseSettings):
     """
 
     MAIL_TYPE: Optional[str] = Field(
-        description="Mail provider type name, default to None, availabile values are `smtp` and `resend`.",
+        description="Mail provider type name, default to None, available values are `smtp` and `resend`.",
         default=None,
     )
 

File diff suppressed because it is too large
+ 1 - 1
api/constants/recommended_apps.json


+ 1 - 1
api/controllers/console/datasets/datasets.py

@@ -18,7 +18,7 @@ from core.model_runtime.entities.model_entities import ModelType
 from core.provider_manager import ProviderManager
 from core.rag.datasource.vdb.vector_type import VectorType
 from core.rag.extractor.entity.extract_setting import ExtractSetting
-from core.rag.retrieval.retrival_methods import RetrievalMethod
+from core.rag.retrieval.retrieval_methods import RetrievalMethod
 from extensions.ext_database import db
 from fields.app_fields import related_app_list
 from fields.dataset_fields import dataset_detail_fields, dataset_query_detail_fields

+ 1 - 1
api/controllers/service_api/dataset/segment.py

@@ -67,7 +67,7 @@ class SegmentApi(DatasetApiResource):
             segments = SegmentService.multi_create_segment(args["segments"], document, dataset)
             return {"data": marshal(segments, segment_fields), "doc_form": document.doc_form}, 200
         else:
-            return {"error": "Segemtns is required"}, 400
+            return {"error": "Segments is required"}, 400
 
     def get(self, tenant_id, dataset_id, document_id):
         """Create single segment."""

+ 1 - 1
api/core/helper/position_helper.py

@@ -79,7 +79,7 @@ def is_filtered(
         name_func: Callable[[Any], str],
 ) -> bool:
     """
-    Chcek if the object should be filtered out.
+    Check if the object should be filtered out.
     Overall logic: exclude > include > pin
     :param include_set: the set of names to be included
     :param exclude_set: the set of names to be excluded

+ 1 - 1
api/core/indexing_runner.py

@@ -494,7 +494,7 @@ class IndexingRunner:
                     hash = helper.generate_text_hash(document_node.page_content)
                     document_node.metadata['doc_id'] = doc_id
                     document_node.metadata['doc_hash'] = hash
-                    # delete Spliter character
+                    # delete Splitter character
                     page_content = document_node.page_content
                     if page_content.startswith(".") or page_content.startswith("。"):
                         page_content = page_content[1:]

+ 1 - 1
api/core/llm_generator/prompts.py

@@ -87,7 +87,7 @@ Here is a task description for which I would like you to create a high-quality p
 {{TASK_DESCRIPTION}}
 </task_description>
 Based on task description, please create a well-structured prompt template that another AI could use to consistently complete the task. The prompt template should include:
-- Do not inlcude <input> or <output> section and variables in the prompt, assume user will add them at their own will. 
+- Do not include <input> or <output> section and variables in the prompt, assume user will add them at their own will. 
 - Clear instructions for the AI that will be using this prompt, demarcated with <instructions> tags. The instructions should provide step-by-step directions on how to complete the task using the input variables. Also Specifies in the instructions that the output should not contain any xml tag. 
 - Relevant examples if needed to clarify the task further, demarcated with <example> tags. Do not include variables in the prompt. Give three pairs of input and output examples.   
 - Include other relevant sections demarcated with appropriate XML tags like <examples>, <instructions>.

+ 2 - 2
api/core/model_runtime/docs/en_US/schema.md

@@ -52,7 +52,7 @@
     - `mode` (string)  voice model.(available for model type `tts`)
     - `name` (string)  voice model display name.(available for model type `tts`)
     - `language` (string)  the voice model supports languages.(available for model type `tts`)
-  - `word_limit` (int)  Single conversion word limit, paragraphwise by default(available for model type `tts`)
+  - `word_limit` (int)  Single conversion word limit, paragraph-wise by default(available for model type `tts`)
   - `audio_type` (string)  Support audio file extension format, e.g.:mp3,wav(available for model type `tts`)
   - `max_workers` (int)  Number of concurrent workers supporting text and audio conversion(available for model type`tts`)
   - `max_characters_per_chunk` (int) Maximum characters per chunk (available for model type `moderation`)
@@ -150,7 +150,7 @@
 
 - `input` (float) Input price, i.e., Prompt price
 - `output` (float) Output price, i.e., returned content price
-- `unit` (float) Pricing unit, e.g., if the price is meausred in 1M tokens, the corresponding token amount for the unit price is `0.000001`.
+- `unit` (float) Pricing unit, e.g., if the price is measured in 1M tokens, the corresponding token amount for the unit price is `0.000001`.
 - `currency` (string) Currency unit
 
 ### ProviderCredentialSchema

+ 1 - 1
api/core/model_runtime/model_providers/__base/tts_model.py

@@ -13,7 +13,7 @@ logger = logging.getLogger(__name__)
 
 class TTSModel(AIModel):
     """
-    Model class for ttstext model.
+    Model class for TTS model.
     """
     model_type: ModelType = ModelType.TTS
 

+ 1 - 1
api/core/model_runtime/model_providers/azure_openai/llm/llm.py

@@ -284,7 +284,7 @@ class AzureOpenAILargeLanguageModel(_CommonAzureOpenAI, LargeLanguageModel):
                 try:
                     schema = json.loads(json_schema)
                 except:
-                    raise ValueError(f"not currect json_schema format: {json_schema}")
+                    raise ValueError(f"not correct json_schema format: {json_schema}")
                 model_parameters.pop("json_schema")
                 model_parameters["response_format"] = {"type": "json_schema", "json_schema": schema}
             else:

+ 1 - 1
api/core/model_runtime/model_providers/baichuan/llm/llm.py

@@ -37,7 +37,7 @@ from core.model_runtime.model_providers.baichuan.llm.baichuan_turbo_errors impor
 )
 
 
-class BaichuanLarguageModel(LargeLanguageModel):
+class BaichuanLanguageModel(LargeLanguageModel):
 
     def _invoke(
             self,

+ 1 - 1
api/core/model_runtime/model_providers/baichuan/text_embedding/text_embedding.py

@@ -60,7 +60,7 @@ class BaichuanTextEmbeddingModel(TextEmbeddingModel):
         token_usage = 0
 
         for chunk in chunks:
-            # embeding chunk
+            # embedding chunk
             chunk_embeddings, chunk_usage = self.embedding(
                 model=model,
                 api_key=api_key,

+ 3 - 3
api/core/model_runtime/model_providers/bedrock/llm/llm.py

@@ -793,11 +793,11 @@ class BedrockLargeLanguageModel(LargeLanguageModel):
     def _invoke_error_mapping(self) -> dict[type[InvokeError], list[type[Exception]]]:
         """
         Map model invoke error to unified error
-        The key is the ermd = genai.GenerativeModel(model)ror type thrown to the caller
-        The value is the md = genai.GenerativeModel(model)error type thrown by the model,
+        The key is the ermd = genai.GenerativeModel(model) error type thrown to the caller
+        The value is the md = genai.GenerativeModel(model) error type thrown by the model,
         which needs to be converted into a unified error type for the caller.
 
-        :return: Invoke emd = genai.GenerativeModel(model)rror mapping
+        :return: Invoke emd = genai.GenerativeModel(model) error mapping
         """
         return {
             InvokeConnectionError: [],

+ 3 - 3
api/core/model_runtime/model_providers/bedrock/text_embedding/text_embedding.py

@@ -130,11 +130,11 @@ class BedrockTextEmbeddingModel(TextEmbeddingModel):
     def _invoke_error_mapping(self) -> dict[type[InvokeError], list[type[Exception]]]:
         """
         Map model invoke error to unified error
-        The key is the ermd = genai.GenerativeModel(model)ror type thrown to the caller
-        The value is the md = genai.GenerativeModel(model)error type thrown by the model,
+        The key is the ermd = genai.GenerativeModel(model) error type thrown to the caller
+        The value is the md = genai.GenerativeModel(model) error type thrown by the model,
         which needs to be converted into a unified error type for the caller.
 
-        :return: Invoke emd = genai.GenerativeModel(model)rror mapping
+        :return: Invoke emd = genai.GenerativeModel(model) error mapping
         """
         return {
             InvokeConnectionError: [],

+ 3 - 3
api/core/model_runtime/model_providers/google/llm/llm.py

@@ -416,11 +416,11 @@ class GoogleLargeLanguageModel(LargeLanguageModel):
     def _invoke_error_mapping(self) -> dict[type[InvokeError], list[type[Exception]]]:
         """
         Map model invoke error to unified error
-        The key is the ermd = genai.GenerativeModel(model)ror type thrown to the caller
-        The value is the md = genai.GenerativeModel(model)error type thrown by the model,
+        The key is the ermd = genai.GenerativeModel(model) error type thrown to the caller
+        The value is the md = genai.GenerativeModel(model) error type thrown by the model,
         which needs to be converted into a unified error type for the caller.
 
-        :return: Invoke emd = genai.GenerativeModel(model)rror mapping
+        :return: Invoke emd = genai.GenerativeModel(model) error mapping
         """
         return {
             InvokeConnectionError: [

+ 1 - 1
api/core/model_runtime/model_providers/minimax/llm/llm.py

@@ -86,7 +86,7 @@ class MinimaxLargeLanguageModel(LargeLanguageModel):
             Calculate num tokens for minimax model
 
             not like ChatGLM, Minimax has a special prompt structure, we could not find a proper way
-            to caculate the num tokens, so we use str() to convert the prompt to string
+            to calculate the num tokens, so we use str() to convert the prompt to string
 
             Minimax does not provide their own tokenizer of adab5.5 and abab5 model
             therefore, we use gpt2 tokenizer instead

+ 1 - 0
api/core/model_runtime/model_providers/novita/llm/llm.py

@@ -10,6 +10,7 @@ from core.model_runtime.model_providers.openai_api_compatible.llm.llm import OAI
 class NovitaLargeLanguageModel(OAIAPICompatLargeLanguageModel):
 
     def _update_endpoint_url(self, credentials: dict):
+        
         credentials['endpoint_url'] = "https://api.novita.ai/v3/openai"
         credentials['extra_headers'] = { 'X-Novita-Source': 'dify.ai' }
         return credentials

+ 4 - 4
api/core/model_runtime/model_providers/oci/llm/llm.py

@@ -243,7 +243,7 @@ class OCILargeLanguageModel(LargeLanguageModel):
         request_args["compartmentId"] = compartment_id
         request_args["servingMode"]["modelId"] = model
 
-        chathistory = []
+        chat_history = []
         system_prompts = []
         #if "meta.llama" in model:
         #    request_args["chatRequest"]["apiFormat"] = "GENERIC"
@@ -273,16 +273,16 @@ class OCILargeLanguageModel(LargeLanguageModel):
                 if isinstance(message.content, str):
                     text = message.content
                 if isinstance(message, UserPromptMessage):
-                    chathistory.append({"role": "USER", "message": text})
+                    chat_history.append({"role": "USER", "message": text})
                 else:
-                    chathistory.append({"role": "CHATBOT", "message": text})
+                    chat_history.append({"role": "CHATBOT", "message": text})
                 if isinstance(message, SystemPromptMessage):
                     if isinstance(message.content, str):
                         system_prompts.append(message.content)
             args = {"apiFormat": "COHERE",
                     "preambleOverride": ' '.join(system_prompts),
                     "message": prompt_messages[-1].content,
-                    "chatHistory": chathistory, }
+                    "chatHistory": chat_history, }
             request_args["chatRequest"].update(args)
         elif model.startswith("meta"):
             #print("run meta " * 10)

+ 1 - 1
api/core/model_runtime/model_providers/openai/llm/llm.py

@@ -552,7 +552,7 @@ class OpenAILargeLanguageModel(_CommonOpenAI, LargeLanguageModel):
                 try:
                     schema = json.loads(json_schema)
                 except:
-                    raise ValueError(f"not currect json_schema format: {json_schema}")
+                    raise ValueError(f"not correct json_schema format: {json_schema}")
                 model_parameters.pop("json_schema")
                 model_parameters["response_format"] = {"type": "json_schema", "json_schema": schema}
             else:

+ 4 - 4
api/core/model_runtime/model_providers/tencent/speech2text/flash_recognizer.py

@@ -67,7 +67,7 @@ class FlashRecognitionRequest:
 
 class FlashRecognizer:
     """
-    reponse:
+    response:
     request_id        string
     status            Integer    
     message           String    
@@ -132,9 +132,9 @@ class FlashRecognizer:
         signstr = self._format_sign_string(query)
         signature = self._sign(signstr, secret_key)
         header["Authorization"] = signature
-        requrl = "https://"
-        requrl += signstr[4::]
-        return requrl
+        req_url = "https://"
+        req_url += signstr[4::]
+        return req_url
 
     def _create_query_arr(self, req):
         return {

+ 3 - 3
api/core/model_runtime/model_providers/vertex_ai/llm/llm.py

@@ -695,11 +695,11 @@ class VertexAiLargeLanguageModel(LargeLanguageModel):
     def _invoke_error_mapping(self) -> dict[type[InvokeError], list[type[Exception]]]:
         """
         Map model invoke error to unified error
-        The key is the ermd = gml.GenerativeModel(model)ror type thrown to the caller
-        The value is the md = gml.GenerativeModel(model)error type thrown by the model,
+        The key is the ermd = gml.GenerativeModel(model) error type thrown to the caller
+        The value is the md = gml.GenerativeModel(model) error type thrown by the model,
         which needs to be converted into a unified error type for the caller.
 
-        :return: Invoke emd = gml.GenerativeModel(model)rror mapping
+        :return: Invoke emd = gml.GenerativeModel(model) error mapping
         """
         return {
             InvokeConnectionError: [

+ 4 - 4
api/core/model_runtime/model_providers/zhipuai/zhipuai_sdk/core/_http_client.py

@@ -135,16 +135,16 @@ class HttpClient:
             **kwargs,
         )
 
-    def _object_to_formfata(self, key: str, value: Data | Mapping[object, object]) -> list[tuple[str, str]]:
+    def _object_to_formdata(self, key: str, value: Data | Mapping[object, object]) -> list[tuple[str, str]]:
         items = []
 
         if isinstance(value, Mapping):
             for k, v in value.items():
-                items.extend(self._object_to_formfata(f"{key}[{k}]", v))
+                items.extend(self._object_to_formdata(f"{key}[{k}]", v))
             return items
         if isinstance(value, list | tuple):
             for v in value:
-                items.extend(self._object_to_formfata(key + "[]", v))
+                items.extend(self._object_to_formdata(key + "[]", v))
             return items
 
         def _primitive_value_to_str(val) -> str:
@@ -165,7 +165,7 @@ class HttpClient:
 
     def _make_multipartform(self, data: Mapping[object, object]) -> dict[str, object]:
 
-        items = flatten([self._object_to_formfata(k, v) for k, v in data.items()])
+        items = flatten([self._object_to_formdata(k, v) for k, v in data.items()])
 
         serialized: dict[str, object] = {}
         for key, value in items:

+ 1 - 1
api/core/rag/cleaner/unstructured/unstructured_non_ascii_chars_cleaner.py

@@ -8,5 +8,5 @@ class UnstructuredNonAsciiCharsCleaner(BaseCleaner):
         """clean document content."""
         from unstructured.cleaners.core import clean_non_ascii_chars
 
-        # Returns "This text containsnon-ascii characters!"
+        # Returns "This text contains non-ascii characters!"
         return clean_non_ascii_chars(content)

+ 12 - 12
api/core/rag/datasource/retrieval_service.py

@@ -7,7 +7,7 @@ from core.rag.data_post_processor.data_post_processor import DataPostProcessor
 from core.rag.datasource.keyword.keyword_factory import Keyword
 from core.rag.datasource.vdb.vector_factory import Vector
 from core.rag.rerank.constants.rerank_mode import RerankMode
-from core.rag.retrieval.retrival_methods import RetrievalMethod
+from core.rag.retrieval.retrieval_methods import RetrievalMethod
 from extensions.ext_database import db
 from models.dataset import Dataset
 
@@ -26,7 +26,7 @@ default_retrieval_model = {
 class RetrievalService:
 
     @classmethod
-    def retrieve(cls, retrival_method: str, dataset_id: str, query: str,
+    def retrieve(cls, retrieval_method: str, dataset_id: str, query: str,
                  top_k: int, score_threshold: Optional[float] = .0,
                  reranking_model: Optional[dict] = None, reranking_mode: Optional[str] = 'reranking_model',
                  weights: Optional[dict] = None):
@@ -39,7 +39,7 @@ class RetrievalService:
         threads = []
         exceptions = []
         # retrieval_model source with keyword
-        if retrival_method == 'keyword_search':
+        if retrieval_method == 'keyword_search':
             keyword_thread = threading.Thread(target=RetrievalService.keyword_search, kwargs={
                 'flask_app': current_app._get_current_object(),
                 'dataset_id': dataset_id,
@@ -51,7 +51,7 @@ class RetrievalService:
             threads.append(keyword_thread)
             keyword_thread.start()
         # retrieval_model source with semantic
-        if RetrievalMethod.is_support_semantic_search(retrival_method):
+        if RetrievalMethod.is_support_semantic_search(retrieval_method):
             embedding_thread = threading.Thread(target=RetrievalService.embedding_search, kwargs={
                 'flask_app': current_app._get_current_object(),
                 'dataset_id': dataset_id,
@@ -60,19 +60,19 @@ class RetrievalService:
                 'score_threshold': score_threshold,
                 'reranking_model': reranking_model,
                 'all_documents': all_documents,
-                'retrival_method': retrival_method,
+                'retrieval_method': retrieval_method,
                 'exceptions': exceptions,
             })
             threads.append(embedding_thread)
             embedding_thread.start()
 
         # retrieval source with full text
-        if RetrievalMethod.is_support_fulltext_search(retrival_method):
+        if RetrievalMethod.is_support_fulltext_search(retrieval_method):
             full_text_index_thread = threading.Thread(target=RetrievalService.full_text_index_search, kwargs={
                 'flask_app': current_app._get_current_object(),
                 'dataset_id': dataset_id,
                 'query': query,
-                'retrival_method': retrival_method,
+                'retrieval_method': retrieval_method,
                 'score_threshold': score_threshold,
                 'top_k': top_k,
                 'reranking_model': reranking_model,
@@ -89,7 +89,7 @@ class RetrievalService:
             exception_message = ';\n'.join(exceptions)
             raise Exception(exception_message)
 
-        if retrival_method == RetrievalMethod.HYBRID_SEARCH.value:
+        if retrieval_method == RetrievalMethod.HYBRID_SEARCH.value:
             data_post_processor = DataPostProcessor(str(dataset.tenant_id), reranking_mode,
                                                     reranking_model, weights, False)
             all_documents = data_post_processor.invoke(
@@ -124,7 +124,7 @@ class RetrievalService:
     @classmethod
     def embedding_search(cls, flask_app: Flask, dataset_id: str, query: str,
                          top_k: int, score_threshold: Optional[float], reranking_model: Optional[dict],
-                         all_documents: list, retrival_method: str, exceptions: list):
+                         all_documents: list, retrieval_method: str, exceptions: list):
         with flask_app.app_context():
             try:
                 dataset = db.session.query(Dataset).filter(
@@ -146,7 +146,7 @@ class RetrievalService:
                 )
 
                 if documents:
-                    if reranking_model and reranking_model.get('reranking_model_name') and reranking_model.get('reranking_provider_name') and retrival_method == RetrievalMethod.SEMANTIC_SEARCH.value:
+                    if reranking_model and reranking_model.get('reranking_model_name') and reranking_model.get('reranking_provider_name') and retrieval_method == RetrievalMethod.SEMANTIC_SEARCH.value:
                         data_post_processor = DataPostProcessor(str(dataset.tenant_id),
                                                                 RerankMode.RERANKING_MODEL.value,
                                                                 reranking_model, None, False)
@@ -164,7 +164,7 @@ class RetrievalService:
     @classmethod
     def full_text_index_search(cls, flask_app: Flask, dataset_id: str, query: str,
                                top_k: int, score_threshold: Optional[float], reranking_model: Optional[dict],
-                               all_documents: list, retrival_method: str, exceptions: list):
+                               all_documents: list, retrieval_method: str, exceptions: list):
         with flask_app.app_context():
             try:
                 dataset = db.session.query(Dataset).filter(
@@ -180,7 +180,7 @@ class RetrievalService:
                     top_k=top_k
                 )
                 if documents:
-                    if reranking_model and reranking_model.get('reranking_model_name') and reranking_model.get('reranking_provider_name') and retrival_method == RetrievalMethod.FULL_TEXT_SEARCH.value:
+                    if reranking_model and reranking_model.get('reranking_model_name') and reranking_model.get('reranking_provider_name') and retrieval_method == RetrievalMethod.FULL_TEXT_SEARCH.value:
                         data_post_processor = DataPostProcessor(str(dataset.tenant_id),
                                                                 RerankMode.RERANKING_MODEL.value,
                                                                 reranking_model, None, False)

+ 0 - 0
api/core/rag/extractor/blod/blod.py → api/core/rag/extractor/blob/blob.py


+ 4 - 4
api/core/rag/extractor/notion_extractor.py

@@ -275,10 +275,10 @@ class NotionExtractor(BaseExtractor):
             data = res.json()
             # get table headers text
             table_header_cell_texts = []
-            tabel_header_cells = data["results"][0]['table_row']['cells']
-            for tabel_header_cell in tabel_header_cells:
-                if tabel_header_cell:
-                    for table_header_cell_text in tabel_header_cell:
+            table_header_cells = data["results"][0]['table_row']['cells']
+            for table_header_cell in table_header_cells:
+                if table_header_cell:
+                    for table_header_cell_text in table_header_cell:
                         text = table_header_cell_text["text"]["content"]
                         table_header_cell_texts.append(text)
                 else:

+ 1 - 1
api/core/rag/extractor/pdf_extractor.py

@@ -2,7 +2,7 @@
 from collections.abc import Iterator
 from typing import Optional
 
-from core.rag.extractor.blod.blod import Blob
+from core.rag.extractor.blob.blob import Blob
 from core.rag.extractor.extractor_base import BaseExtractor
 from core.rag.models.document import Document
 from extensions.ext_storage import storage

+ 1 - 1
api/core/rag/index_processor/index_processor_base.py

@@ -34,7 +34,7 @@ class BaseIndexProcessor(ABC):
         raise NotImplementedError
 
     @abstractmethod
-    def retrieve(self, retrival_method: str, query: str, dataset: Dataset, top_k: int,
+    def retrieve(self, retrieval_method: str, query: str, dataset: Dataset, top_k: int,
                  score_threshold: float, reranking_model: dict) -> list[Document]:
         raise NotImplementedError
 

+ 3 - 3
api/core/rag/index_processor/processor/paragraph_index_processor.py

@@ -42,7 +42,7 @@ class ParagraphIndexProcessor(BaseIndexProcessor):
                     hash = helper.generate_text_hash(document_node.page_content)
                     document_node.metadata['doc_id'] = doc_id
                     document_node.metadata['doc_hash'] = hash
-                    # delete Spliter character
+                    # delete Splitter character
                     page_content = document_node.page_content
                     if page_content.startswith(".") or page_content.startswith("。"):
                         page_content = page_content[1:].strip()
@@ -76,10 +76,10 @@ class ParagraphIndexProcessor(BaseIndexProcessor):
             else:
                 keyword.delete()
 
-    def retrieve(self, retrival_method: str, query: str, dataset: Dataset, top_k: int,
+    def retrieve(self, retrieval_method: str, query: str, dataset: Dataset, top_k: int,
                  score_threshold: float, reranking_model: dict) -> list[Document]:
         # Set search parameters.
-        results = RetrievalService.retrieve(retrival_method=retrival_method, dataset_id=dataset.id, query=query,
+        results = RetrievalService.retrieve(retrieval_method=retrieval_method, dataset_id=dataset.id, query=query,
                                             top_k=top_k, score_threshold=score_threshold,
                                             reranking_model=reranking_model)
         # Organize results.

+ 3 - 3
api/core/rag/index_processor/processor/qa_index_processor.py

@@ -50,7 +50,7 @@ class QAIndexProcessor(BaseIndexProcessor):
                     hash = helper.generate_text_hash(document_node.page_content)
                     document_node.metadata['doc_id'] = doc_id
                     document_node.metadata['doc_hash'] = hash
-                    # delete Spliter character
+                    # delete Splitter character
                     page_content = document_node.page_content
                     if page_content.startswith(".") or page_content.startswith("。"):
                         page_content = page_content[1:]
@@ -107,10 +107,10 @@ class QAIndexProcessor(BaseIndexProcessor):
         else:
             vector.delete()
 
-    def retrieve(self, retrival_method: str, query: str, dataset: Dataset, top_k: int,
+    def retrieve(self, retrieval_method: str, query: str, dataset: Dataset, top_k: int,
                  score_threshold: float, reranking_model: dict):
         # Set search parameters.
-        results = RetrievalService.retrieve(retrival_method=retrival_method, dataset_id=dataset.id, query=query,
+        results = RetrievalService.retrieve(retrieval_method=retrieval_method, dataset_id=dataset.id, query=query,
                                             top_k=top_k, score_threshold=score_threshold,
                                             reranking_model=reranking_model)
         # Organize results.

+ 10 - 10
api/core/rag/retrieval/dataset_retrieval.py

@@ -21,7 +21,7 @@ from core.rag.data_post_processor.data_post_processor import DataPostProcessor
 from core.rag.datasource.keyword.jieba.jieba_keyword_table_handler import JiebaKeywordTableHandler
 from core.rag.datasource.retrieval_service import RetrievalService
 from core.rag.models.document import Document
-from core.rag.retrieval.retrival_methods import RetrievalMethod
+from core.rag.retrieval.retrieval_methods import RetrievalMethod
 from core.rag.retrieval.router.multi_dataset_function_call_router import FunctionCallMultiDatasetRouter
 from core.rag.retrieval.router.multi_dataset_react_route import ReactMultiDatasetRouter
 from core.tools.tool.dataset_retriever.dataset_multi_retriever_tool import DatasetMultiRetrieverTool
@@ -261,9 +261,9 @@ class DatasetRetrieval:
                 top_k = retrieval_model_config['top_k']
                 # get retrieval method
                 if dataset.indexing_technique == "economy":
-                    retrival_method = 'keyword_search'
+                    retrieval_method = 'keyword_search'
                 else:
-                    retrival_method = retrieval_model_config['search_method']
+                    retrieval_method = retrieval_model_config['search_method']
                 # get reranking model
                 reranking_model = retrieval_model_config['reranking_model'] \
                     if retrieval_model_config['reranking_enable'] else None
@@ -275,7 +275,7 @@ class DatasetRetrieval:
 
                 with measure_time() as timer:
                     results = RetrievalService.retrieve(
-                        retrival_method=retrival_method, dataset_id=dataset.id,
+                        retrieval_method=retrieval_method, dataset_id=dataset.id,
                         query=query,
                         top_k=top_k, score_threshold=score_threshold,
                         reranking_model=reranking_model,
@@ -285,7 +285,7 @@ class DatasetRetrieval:
                 self._on_query(query, [dataset_id], app_id, user_from, user_id)
 
                 if results:
-                    self._on_retrival_end(results, message_id, timer)
+                    self._on_retrieval_end(results, message_id, timer)
 
                 return results
         return []
@@ -347,14 +347,14 @@ class DatasetRetrieval:
         self._on_query(query, dataset_ids, app_id, user_from, user_id)
 
         if all_documents:
-            self._on_retrival_end(all_documents, message_id, timer)
+            self._on_retrieval_end(all_documents, message_id, timer)
 
         return all_documents
 
-    def _on_retrival_end(
+    def _on_retrieval_end(
         self, documents: list[Document], message_id: Optional[str] = None, timer: Optional[dict] = None
     ) -> None:
-        """Handle retrival end."""
+        """Handle retrieval end."""
         for document in documents:
             query = db.session.query(DocumentSegment).filter(
                 DocumentSegment.index_node_id == document.metadata['doc_id']
@@ -419,7 +419,7 @@ class DatasetRetrieval:
 
             if dataset.indexing_technique == "economy":
                 # use keyword table query
-                documents = RetrievalService.retrieve(retrival_method='keyword_search',
+                documents = RetrievalService.retrieve(retrieval_method='keyword_search',
                                                       dataset_id=dataset.id,
                                                       query=query,
                                                       top_k=top_k
@@ -429,7 +429,7 @@ class DatasetRetrieval:
             else:
                 if top_k > 0:
                     # retrieval source
-                    documents = RetrievalService.retrieve(retrival_method=retrieval_model['search_method'],
+                    documents = RetrievalService.retrieve(retrieval_method=retrieval_model['search_method'],
                                                           dataset_id=dataset.id,
                                                           query=query,
                                                           top_k=top_k,

+ 0 - 0
api/core/rag/retrieval/retrival_methods.py → api/core/rag/retrieval/retrieval_methods.py


+ 1 - 1
api/core/tools/provider/builtin/dalle/dalle.yaml

@@ -29,7 +29,7 @@ credentials_for_provider:
       en_US: Please input your OpenAI API key
       zh_Hans: 请输入你的 OpenAI API key
       pt_BR: Please input your OpenAI API key
-  openai_organizaion_id:
+  openai_organization_id:
     type: text-input
     required: false
     label:

+ 1 - 1
api/core/tools/provider/builtin/dalle/tools/dalle2.py

@@ -16,7 +16,7 @@ class DallE2Tool(BuiltinTool):
         """
             invoke tools
         """
-        openai_organization = self.runtime.credentials.get('openai_organizaion_id', None)
+        openai_organization = self.runtime.credentials.get('openai_organization_id', None)
         if not openai_organization:
             openai_organization = None
         openai_base_url = self.runtime.credentials.get('openai_base_url', None)

+ 1 - 1
api/core/tools/provider/builtin/dalle/tools/dalle3.py

@@ -17,7 +17,7 @@ class DallE3Tool(BuiltinTool):
         """
             invoke tools
         """
-        openai_organization = self.runtime.credentials.get('openai_organizaion_id', None)
+        openai_organization = self.runtime.credentials.get('openai_organization_id', None)
         if not openai_organization:
             openai_organization = None
         openai_base_url = self.runtime.credentials.get('openai_base_url', None)

+ 1 - 1
api/core/tools/provider/builtin/github/github.py

@@ -4,7 +4,7 @@ from core.tools.errors import ToolProviderCredentialValidationError
 from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
 
 
-class GihubProvider(BuiltinToolProviderController):
+class GithubProvider(BuiltinToolProviderController):
     def _validate_credentials(self, credentials: dict) -> None:
         try:
             if 'access_tokens' not in credentials or not credentials.get('access_tokens'):

+ 1 - 1
api/core/tools/provider/builtin/github/tools/github_repositories.py

@@ -9,7 +9,7 @@ from core.tools.entities.tool_entities import ToolInvokeMessage
 from core.tools.tool.builtin_tool import BuiltinTool
 
 
-class GihubRepositoriesTool(BuiltinTool):
+class GithubRepositoriesTool(BuiltinTool):
     def _invoke(self, user_id: str, tool_parameters: dict[str, Any]) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]:
         """
             invoke tools

+ 2 - 2
api/core/tools/provider/builtin/gitlab/tools/gitlab_commits.py

@@ -60,7 +60,7 @@ class GitlabCommitsTool(BuiltinTool):
                 project_name = project['name']
                 print(f"Project: {project_name}")
 
-                # Get all of proejct commits
+                # Get all of project commits
                 commits_url = f"{domain}/api/v4/projects/{project_id}/repository/commits"
                 params = {
                     'since': start_time,
@@ -83,7 +83,7 @@ class GitlabCommitsTool(BuiltinTool):
                     diffs = diff_response.json()
                     
                     for diff in diffs:
-                        # Caculate code lines of changed
+                        # Calculate code lines of changed
                         added_lines = diff['diff'].count('\n+')
                         removed_lines = diff['diff'].count('\n-')
                         total_changes = added_lines + removed_lines

+ 1 - 1
api/core/tools/provider/builtin/gitlab/tools/gitlab_commits.yaml

@@ -6,7 +6,7 @@ identity:
     zh_Hans: GitLab 提交内容查询
 description:
   human:
-    en_US: A tool for query GitLab commits, Input should be a exists username or projec.
+    en_US: A tool for query GitLab commits, Input should be a exists username or project.
     zh_Hans: 一个用于查询 GitLab 代码提交内容的工具,输入的内容应该是一个已存在的用户名或者项目名。
   llm: A tool for query GitLab commits, Input should be a exists username or project.
 parameters:

+ 1 - 1
api/core/tools/provider/builtin/openweather/tools/weather.py

@@ -29,7 +29,7 @@ class OpenweatherTool(BuiltinTool):
             # request URL
             url = "https://api.openweathermap.org/data/2.5/weather"
 
-            # request parmas
+            # request params
             params = {
                 "q": city,
                 "appid": self.runtime.credentials.get("api_key"),

+ 8 - 8
api/core/tools/provider/builtin/spark/tools/spark_img_generation.py

@@ -35,20 +35,20 @@ def sha256base64(data):
     return digest
 
 
-def parse_url(requset_url):
-    stidx = requset_url.index("://")
-    host = requset_url[stidx + 3 :]
-    schema = requset_url[: stidx + 3]
+def parse_url(request_url):
+    stidx = request_url.index("://")
+    host = request_url[stidx + 3 :]
+    schema = request_url[: stidx + 3]
     edidx = host.index("/")
     if edidx <= 0:
-        raise AssembleHeaderException("invalid request url:" + requset_url)
+        raise AssembleHeaderException("invalid request url:" + request_url)
     path = host[edidx:]
     host = host[:edidx]
     u = Url(host, path, schema)
     return u
 
-def assemble_ws_auth_url(requset_url, method="GET", api_key="", api_secret=""):
-    u = parse_url(requset_url)
+def assemble_ws_auth_url(request_url, method="GET", api_key="", api_secret=""):
+    u = parse_url(request_url)
     host = u.host
     path = u.path
     now = datetime.now()
@@ -69,7 +69,7 @@ def assemble_ws_auth_url(requset_url, method="GET", api_key="", api_secret=""):
     )
     values = {"host": host, "date": date, "authorization": authorization}
 
-    return requset_url + "?" + urlencode(values)
+    return request_url + "?" + urlencode(values)
 
 
 def get_body(appid, text):

+ 1 - 1
api/core/tools/provider/builtin/spider/tools/scraper_crawler.py

@@ -42,6 +42,6 @@ class ScrapeTool(BuiltinTool):
                     result += "URL: " + i.get('url', '') + "\n"
                     result += "CONTENT: " + i.get('content', '') + "\n\n"
         except Exception as e:
-            return self.create_text_message("An error occured", str(e))
+            return self.create_text_message("An error occurred", str(e))
 
         return self.create_text_message(result)

+ 3 - 3
api/core/tools/tool/dataset_retriever/dataset_multi_retriever_tool.py

@@ -8,7 +8,7 @@ from core.model_manager import ModelManager
 from core.model_runtime.entities.model_entities import ModelType
 from core.rag.datasource.retrieval_service import RetrievalService
 from core.rag.rerank.rerank_model import RerankModelRunner
-from core.rag.retrieval.retrival_methods import RetrievalMethod
+from core.rag.retrieval.retrieval_methods import RetrievalMethod
 from core.tools.tool.dataset_retriever.dataset_retriever_base_tool import DatasetRetrieverBaseTool
 from extensions.ext_database import db
 from models.dataset import Dataset, Document, DocumentSegment
@@ -163,7 +163,7 @@ class DatasetMultiRetrieverTool(DatasetRetrieverBaseTool):
 
             if dataset.indexing_technique == "economy":
                 # use keyword table query
-                documents = RetrievalService.retrieve(retrival_method='keyword_search',
+                documents = RetrievalService.retrieve(retrieval_method='keyword_search',
                                                       dataset_id=dataset.id,
                                                       query=query,
                                                       top_k=self.top_k
@@ -173,7 +173,7 @@ class DatasetMultiRetrieverTool(DatasetRetrieverBaseTool):
             else:
                 if self.top_k > 0:
                     # retrieval source
-                    documents = RetrievalService.retrieve(retrival_method=retrieval_model['search_method'],
+                    documents = RetrievalService.retrieve(retrieval_method=retrieval_model['search_method'],
                                                           dataset_id=dataset.id,
                                                           query=query,
                                                           top_k=self.top_k,

+ 3 - 3
api/core/tools/tool/dataset_retriever/dataset_retriever_tool.py

@@ -2,7 +2,7 @@
 from pydantic import BaseModel, Field
 
 from core.rag.datasource.retrieval_service import RetrievalService
-from core.rag.retrieval.retrival_methods import RetrievalMethod
+from core.rag.retrieval.retrieval_methods import RetrievalMethod
 from core.tools.tool.dataset_retriever.dataset_retriever_base_tool import DatasetRetrieverBaseTool
 from extensions.ext_database import db
 from models.dataset import Dataset, Document, DocumentSegment
@@ -63,7 +63,7 @@ class DatasetRetrieverTool(DatasetRetrieverBaseTool):
         retrieval_model = dataset.retrieval_model if dataset.retrieval_model else default_retrieval_model
         if dataset.indexing_technique == "economy":
             # use keyword table query
-            documents = RetrievalService.retrieve(retrival_method='keyword_search',
+            documents = RetrievalService.retrieve(retrieval_method='keyword_search',
                                                   dataset_id=dataset.id,
                                                   query=query,
                                                   top_k=self.top_k
@@ -72,7 +72,7 @@ class DatasetRetrieverTool(DatasetRetrieverBaseTool):
         else:
             if self.top_k > 0:
                 # retrieval source
-                documents = RetrievalService.retrieve(retrival_method=retrieval_model.get('search_method', 'semantic_search'),
+                documents = RetrievalService.retrieve(retrieval_method=retrieval_model.get('search_method', 'semantic_search'),
                                                       dataset_id=dataset.id,
                                                       query=query,
                                                       top_k=self.top_k,

+ 8 - 8
api/core/tools/tool/dataset_retriever_tool.py

@@ -17,7 +17,7 @@ from core.tools.tool.tool import Tool
 
 
 class DatasetRetrieverTool(Tool):
-    retrival_tool: DatasetRetrieverBaseTool
+    retrieval_tool: DatasetRetrieverBaseTool
 
     @staticmethod
     def get_dataset_tools(tenant_id: str,
@@ -42,7 +42,7 @@ class DatasetRetrieverTool(Tool):
         # Agent only support SINGLE mode
         original_retriever_mode = retrieve_config.retrieve_strategy
         retrieve_config.retrieve_strategy = DatasetRetrieveConfigEntity.RetrieveStrategy.SINGLE
-        retrival_tools = feature.to_dataset_retriever_tool(
+        retrieval_tools = feature.to_dataset_retriever_tool(
             tenant_id=tenant_id,
             dataset_ids=dataset_ids,
             retrieve_config=retrieve_config,
@@ -53,17 +53,17 @@ class DatasetRetrieverTool(Tool):
         # restore retrieve strategy
         retrieve_config.retrieve_strategy = original_retriever_mode
 
-        # convert retrival tools to Tools
+        # convert retrieval tools to Tools
         tools = []
-        for retrival_tool in retrival_tools:
+        for retrieval_tool in retrieval_tools:
             tool = DatasetRetrieverTool(
-                retrival_tool=retrival_tool,
-                identity=ToolIdentity(provider='', author='', name=retrival_tool.name, label=I18nObject(en_US='', zh_Hans='')),
+                retrieval_tool=retrieval_tool,
+                identity=ToolIdentity(provider='', author='', name=retrieval_tool.name, label=I18nObject(en_US='', zh_Hans='')),
                 parameters=[],
                 is_team_authorization=True,
                 description=ToolDescription(
                     human=I18nObject(en_US='', zh_Hans=''),
-                    llm=retrival_tool.description),
+                    llm=retrieval_tool.description),
                 runtime=DatasetRetrieverTool.Runtime()
             )
 
@@ -95,7 +95,7 @@ class DatasetRetrieverTool(Tool):
             return self.create_text_message(text='please input query')
 
         # invoke dataset retriever tool
-        result = self.retrival_tool._run(query=query)
+        result = self.retrieval_tool._run(query=query)
 
         return self.create_text_message(text=result)
 

+ 13 - 13
api/core/tools/utils/web_reader_tool.py

@@ -189,8 +189,8 @@ def extract_text_blocks_as_plain_text(paragraph_html):
 
 
 def plain_text_leaf_node(element):
-    # Extract all text, stripped of any child HTML elements and normalise it
-    plain_text = normalise_text(element.get_text())
+    # Extract all text, stripped of any child HTML elements and normalize it
+    plain_text = normalize_text(element.get_text())
     if plain_text != "" and element.name == "li":
         plain_text = "* {}, ".format(plain_text)
     if plain_text == "":
@@ -231,8 +231,8 @@ def plain_element(element, content_digests, node_indexes):
         # For leaf node elements, extract the text content, discarding any HTML tags
         # 1. Get element contents as text
         plain_text = element.get_text()
-        # 2. Normalise the extracted text string to a canonical representation
-        plain_text = normalise_text(plain_text)
+        # 2. Normalize the extracted text string to a canonical representation
+        plain_text = normalize_text(plain_text)
         # 3. Update element content to be plain text
         element.string = plain_text
     elif is_text(element):
@@ -243,7 +243,7 @@ def plain_element(element, content_digests, node_indexes):
             element = type(element)("")
         else:
             plain_text = element.string
-            plain_text = normalise_text(plain_text)
+            plain_text = normalize_text(plain_text)
             element = type(element)(plain_text)
     else:
         # If not a leaf node or leaf type call recursively on child nodes, replacing
@@ -267,12 +267,12 @@ def add_node_indexes(element, node_index="0"):
     return element
 
 
-def normalise_text(text):
-    """Normalise unicode and whitespace."""
-    # Normalise unicode first to try and standardise whitespace characters as much as possible before normalising them
+def normalize_text(text):
+    """Normalize unicode and whitespace."""
+    # Normalize unicode first to try and standardize whitespace characters as much as possible before normalizing them
     text = strip_control_characters(text)
-    text = normalise_unicode(text)
-    text = normalise_whitespace(text)
+    text = normalize_unicode(text)
+    text = normalize_whitespace(text)
     return text
 
 
@@ -291,14 +291,14 @@ def strip_control_characters(text):
     return "".join(["" if (unicodedata.category(char) in control_chars) and (char not in retained_chars) else char for char in text])
 
 
-def normalise_unicode(text):
-    """Normalise unicode such that things that are visually equivalent map to the same unicode string where possible."""
+def normalize_unicode(text):
+    """Normalize unicode such that things that are visually equivalent map to the same unicode string where possible."""
     normal_form = "NFKC"
     text = unicodedata.normalize(normal_form, text)
     return text
 
 
-def normalise_whitespace(text):
+def normalize_whitespace(text):
     """Replace runs of whitespace characters with a single space as this is what happens when HTML text is displayed."""
     text = regex.sub(r"\s+", " ", text)
     # Remove leading and trailing whitespace

+ 1 - 1
api/core/workflow/entities/variable_pool.py

@@ -31,7 +31,7 @@ class VariablePool:
         #     'files': []
         # }
 
-        # Varaible dictionary is a dictionary for looking up variables by their selector.
+        # Variable dictionary is a dictionary for looking up variables by their selector.
         # The first element of the selector is the node id, it's the first-level key in the dictionary.
         # Other elements of the selector are the keys in the second-level dictionary. To get the key, we hash the
         # elements of the selector except the first one.

+ 1 - 1
api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py

@@ -11,7 +11,7 @@ from core.model_manager import ModelInstance, ModelManager
 from core.model_runtime.entities.model_entities import ModelFeature, ModelType
 from core.model_runtime.model_providers.__base.large_language_model import LargeLanguageModel
 from core.rag.retrieval.dataset_retrieval import DatasetRetrieval
-from core.rag.retrieval.retrival_methods import RetrievalMethod
+from core.rag.retrieval.retrieval_methods import RetrievalMethod
 from core.workflow.entities.base_node_data_entities import BaseNodeData
 from core.workflow.entities.node_entities import NodeRunResult, NodeType
 from core.workflow.entities.variable_pool import VariablePool

+ 2 - 2
api/events/event_handlers/__init__.py

@@ -3,8 +3,8 @@ from .clean_when_document_deleted import handle
 from .create_document_index import handle
 from .create_installed_app_when_app_created import handle
 from .create_site_record_when_app_created import handle
-from .deduct_quota_when_messaeg_created import handle
+from .deduct_quota_when_message_created import handle
 from .delete_tool_parameters_cache_when_sync_draft_workflow import handle
 from .update_app_dataset_join_when_app_model_config_updated import handle
 from .update_app_dataset_join_when_app_published_workflow_updated import handle
-from .update_provider_last_used_at_when_messaeg_created import handle
+from .update_provider_last_used_at_when_message_created import handle

+ 0 - 0
api/events/event_handlers/deduct_quota_when_messaeg_created.py → api/events/event_handlers/deduct_quota_when_message_created.py


+ 0 - 0
api/events/event_handlers/update_provider_last_used_at_when_messaeg_created.py → api/events/event_handlers/update_provider_last_used_at_when_message_created.py


+ 1 - 1
api/models/dataset.py

@@ -14,7 +14,7 @@ from sqlalchemy import func
 from sqlalchemy.dialects.postgresql import JSONB
 
 from configs import dify_config
-from core.rag.retrieval.retrival_methods import RetrievalMethod
+from core.rag.retrieval.retrieval_methods import RetrievalMethod
 from extensions.ext_database import db
 from extensions.ext_storage import storage
 

+ 1 - 1
api/services/dataset_service.py

@@ -15,7 +15,7 @@ from core.model_manager import ModelManager
 from core.model_runtime.entities.model_entities import ModelType
 from core.rag.datasource.keyword.keyword_factory import Keyword
 from core.rag.models.document import Document as RAGDocument
-from core.rag.retrieval.retrival_methods import RetrievalMethod
+from core.rag.retrieval.retrieval_methods import RetrievalMethod
 from events.dataset_event import dataset_was_deleted
 from events.document_event import document_was_deleted
 from extensions.ext_database import db

+ 2 - 2
api/services/hit_testing_service.py

@@ -3,7 +3,7 @@ import time
 
 from core.rag.datasource.retrieval_service import RetrievalService
 from core.rag.models.document import Document
-from core.rag.retrieval.retrival_methods import RetrievalMethod
+from core.rag.retrieval.retrieval_methods import RetrievalMethod
 from extensions.ext_database import db
 from models.account import Account
 from models.dataset import Dataset, DatasetQuery, DocumentSegment
@@ -36,7 +36,7 @@ class HitTestingService:
             retrieval_model = dataset.retrieval_model if dataset.retrieval_model else default_retrieval_model
 
         all_documents = RetrievalService.retrieve(
-            retrival_method=retrieval_model.get("search_method", "semantic_search"),
+            retrieval_method=retrieval_model.get("search_method", "semantic_search"),
             dataset_id=dataset.id,
             query=cls.escape_query_for_search(query),
             top_k=retrieval_model.get("top_k", 2),

+ 1 - 1
api/tasks/sync_website_document_indexing_task.py

@@ -20,7 +20,7 @@ def sync_website_document_indexing_task(dataset_id: str, document_id: str):
     :param dataset_id:
     :param document_id:
 
-    Usage: sunc_website_document_indexing_task.delay(dataset_id, document_id)
+    Usage: sync_website_document_indexing_task.delay(dataset_id, document_id)
     """
     start_at = time.perf_counter()
 

+ 8 - 8
api/tests/integration_tests/model_runtime/baichuan/test_llm.py

@@ -8,11 +8,11 @@ from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk,
 from core.model_runtime.entities.message_entities import AssistantPromptMessage, SystemPromptMessage, UserPromptMessage
 from core.model_runtime.entities.model_entities import AIModelEntity
 from core.model_runtime.errors.validate import CredentialsValidateFailedError
-from core.model_runtime.model_providers.baichuan.llm.llm import BaichuanLarguageModel
+from core.model_runtime.model_providers.baichuan.llm.llm import BaichuanLanguageModel
 
 
 def test_predefined_models():
-    model = BaichuanLarguageModel()
+    model = BaichuanLanguageModel()
     model_schemas = model.predefined_models()
     assert len(model_schemas) >= 1
     assert isinstance(model_schemas[0], AIModelEntity)
@@ -20,7 +20,7 @@ def test_predefined_models():
 
 def test_validate_credentials_for_chat_model():
     sleep(3)
-    model = BaichuanLarguageModel()
+    model = BaichuanLanguageModel()
 
     with pytest.raises(CredentialsValidateFailedError):
         model.validate_credentials(
@@ -38,7 +38,7 @@ def test_validate_credentials_for_chat_model():
 
 def test_invoke_model():
     sleep(3)
-    model = BaichuanLarguageModel()
+    model = BaichuanLanguageModel()
 
     response = model.invoke(
         model="baichuan2-turbo",
@@ -64,7 +64,7 @@ def test_invoke_model():
 
 def test_invoke_model_with_system_message():
     sleep(3)
-    model = BaichuanLarguageModel()
+    model = BaichuanLanguageModel()
 
     response = model.invoke(
         model="baichuan2-turbo",
@@ -93,7 +93,7 @@ def test_invoke_model_with_system_message():
 
 def test_invoke_stream_model():
     sleep(3)
-    model = BaichuanLarguageModel()
+    model = BaichuanLanguageModel()
 
     response = model.invoke(
         model="baichuan2-turbo",
@@ -122,7 +122,7 @@ def test_invoke_stream_model():
 
 def test_invoke_with_search():
     sleep(3)
-    model = BaichuanLarguageModel()
+    model = BaichuanLanguageModel()
 
     response = model.invoke(
         model="baichuan2-turbo",
@@ -156,7 +156,7 @@ def test_invoke_with_search():
 
 def test_get_num_tokens():
     sleep(3)
-    model = BaichuanLarguageModel()
+    model = BaichuanLanguageModel()
 
     response = model.get_num_tokens(
         model="baichuan2-turbo",

+ 1 - 1
api/tests/integration_tests/model_runtime/google/test_llm.py

@@ -155,7 +155,7 @@ def test_invoke_chat_model_with_vision_multi_pics(setup_google_mock):
         user="abc-123",
     )
 
-    print(f"resultz: {result.message.content}")
+    print(f"result: {result.message.content}")
     assert isinstance(result, LLMResult)
     assert len(result.message.content) > 0
 

+ 1 - 1
api/tests/integration_tests/model_runtime/xinference/test_llm.py

@@ -109,7 +109,7 @@ def test_invoke_stream_chat_model(setup_openai_mock, setup_xinference_mock):
 
 
 """
-    Funtion calling of xinference does not support stream mode currently
+    Function calling of xinference does not support stream mode currently
 """
 # def test_invoke_stream_chat_model_with_functions():
 #     model = XinferenceAILargeLanguageModel()

+ 1 - 1
api/tests/integration_tests/vdb/pgvecto_rs/test_pgvecto_rs.py

@@ -31,5 +31,5 @@ class PGVectoRSVectorTest(AbstractVectorTest):
         assert len(ids) == 1
 
 
-def test_pgvecot_rs(setup_mock_redis):
+def test_pgvecto_rs(setup_mock_redis):
     PGVectoRSVectorTest().run_all_tests()

+ 6 - 6
docker/startupscripts/init.sh

@@ -1,13 +1,13 @@
 #!/usr/bin/env bash
 
-DB_INITIALISED="/opt/oracle/oradata/dbinit"
-#[ -f ${DB_INITIALISED} ] && exit
-#touch ${DB_INITIALISED}
-if [ -f ${DB_INITIALISED} ]; then
+DB_INITIALIZED="/opt/oracle/oradata/dbinit"
+#[ -f ${DB_INITIALIZED} ] && exit
+#touch ${DB_INITIALIZED}
+if [ -f ${DB_INITIALIZED} ]; then
   echo 'File exists. Standards for have been Init'
   exit
 else
-  echo 'File does not exist. Standards for first time Strart up this DB'
+  echo 'File does not exist. Standards for first time Start up this DB'
   "$ORACLE_HOME"/bin/sqlplus -s "/ as sysdba" @"/opt/oracle/scripts/startup/init_user.script"; 
-  touch ${DB_INITIALISED}
+  touch ${DB_INITIALIZED}
 fi

+ 1 - 1
sdks/nodejs-client/README.md

@@ -18,7 +18,7 @@ const query = 'Please tell me a short story in 10 words or less.'
 const remote_url_files = [{
     type: 'image',
     transfer_method: 'remote_url',
-    url: 'your_url_addresss'
+    url: 'your_url_address'
 }]
 
 // Create a completion client

+ 1 - 1
web/app/(commonLayout)/app/(appDetailLayout)/[appId]/layout.tsx

@@ -108,7 +108,7 @@ const AppDetailLayout: FC<IAppDetailLayoutProps> = (props) => {
   useEffect(() => {
     setAppDetail()
     fetchAppDetail({ url: '/apps', id: appId }).then((res) => {
-      // redirections
+      // redirection
       if ((res.mode === 'workflow' || res.mode === 'advanced-chat') && (pathname).endsWith('configuration')) {
         router.replace(`/app/${appId}/workflow`)
       }

+ 2 - 2
web/app/(commonLayout)/apps/AppCard.tsx

@@ -21,7 +21,7 @@ import Divider from '@/app/components/base/divider'
 import { getRedirection } from '@/utils/app-redirection'
 import { useProviderContext } from '@/context/provider-context'
 import { NEED_REFRESH_APP_LIST_KEY } from '@/config'
-import { AiText, ChatBot, CuteRobote } from '@/app/components/base/icons/src/vender/solid/communication'
+import { AiText, ChatBot, CuteRobot } from '@/app/components/base/icons/src/vender/solid/communication'
 import { Route } from '@/app/components/base/icons/src/vender/solid/mapsAndTravel'
 import type { CreateAppModalProps } from '@/app/components/explore/create-app-modal'
 import EditAppModal from '@/app/components/explore/create-app-modal'
@@ -273,7 +273,7 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => {
                 <ChatBot className='w-3 h-3 text-[#1570EF]' />
               )}
               {app.mode === 'agent-chat' && (
-                <CuteRobote className='w-3 h-3 text-indigo-600' />
+                <CuteRobot className='w-3 h-3 text-indigo-600' />
               )}
               {app.mode === 'chat' && (
                 <ChatBot className='w-3 h-3 text-[#1570EF]' />

+ 2 - 2
web/app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/layout.tsx

@@ -35,7 +35,7 @@ import { DataSourceType } from '@/models/datasets'
 import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints'
 import { LanguagesSupported } from '@/i18n/language'
 import { useStore } from '@/app/components/app/store'
-import { AiText, ChatBot, CuteRobote } from '@/app/components/base/icons/src/vender/solid/communication'
+import { AiText, ChatBot, CuteRobot } from '@/app/components/base/icons/src/vender/solid/communication'
 import { Route } from '@/app/components/base/icons/src/vender/solid/mapsAndTravel'
 import { getLocaleOnClient } from '@/i18n'
 import { useAppContext } from '@/context/app-context'
@@ -67,7 +67,7 @@ const LikedItem = ({
               <ChatBot className='w-2.5 h-2.5 text-[#1570EF]' />
             )}
             {detail.mode === 'agent-chat' && (
-              <CuteRobote className='w-2.5 h-2.5 text-indigo-600' />
+              <CuteRobot className='w-2.5 h-2.5 text-indigo-600' />
             )}
             {detail.mode === 'chat' && (
               <ChatBot className='w-2.5 h-2.5 text-[#1570EF]' />

+ 1 - 1
web/app/(commonLayout)/datasets/template/template.en.mdx

@@ -148,7 +148,7 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from
         - original_document_id Source document ID (optional)
           - Used to re-upload the document or modify the document cleaning and segmentation configuration. The missing information is copied from the source document
           - The source document cannot be an archived document
-          - When original_document_id is passed in, the update operation is performed on behalf of the document. process_rule is a fillable item. If not filled in, the segmentation method of the source document will be used by defaul
+          - When original_document_id is passed in, the update operation is performed on behalf of the document. process_rule is a fillable item. If not filled in, the segmentation method of the source document will be used by default
           - When original_document_id is not passed in, the new operation is performed on behalf of the document, and process_rule is required
 
         - indexing_technique Index mode

+ 1 - 1
web/app/(commonLayout)/datasets/template/template.zh.mdx

@@ -142,7 +142,7 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from
       </Property>
     </Properties>
 
-    ### Request Bodys
+    ### Request Body
     <Properties>
       <Property name='data' type='multipart/form-data json string' key='data'>
         - original_document_id 源文档 ID (选填)

+ 4 - 4
web/app/components/app-sidebar/app-info.tsx

@@ -22,7 +22,7 @@ import { copyApp, deleteApp, exportAppConfig, updateAppInfo } from '@/service/ap
 import DuplicateAppModal from '@/app/components/app/duplicate-modal'
 import type { DuplicateAppModalProps } from '@/app/components/app/duplicate-modal'
 import CreateAppModal from '@/app/components/explore/create-app-modal'
-import { AiText, ChatBot, CuteRobote } from '@/app/components/base/icons/src/vender/solid/communication'
+import { AiText, ChatBot, CuteRobot } from '@/app/components/base/icons/src/vender/solid/communication'
 import { Route } from '@/app/components/base/icons/src/vender/solid/mapsAndTravel'
 import type { CreateAppModalProps } from '@/app/components/explore/create-app-modal'
 import { NEED_REFRESH_APP_LIST_KEY } from '@/config'
@@ -214,7 +214,7 @@ const AppInfo = ({ expand }: IAppInfoProps) => {
                   <ChatBot className={cn('w-3 h-3 text-[#1570EF]', !expand && '!w-2.5 !h-2.5')} />
                 )}
                 {appDetail.mode === 'agent-chat' && (
-                  <CuteRobote className={cn('w-3 h-3 text-indigo-600', !expand && '!w-2.5 !h-2.5')} />
+                  <CuteRobot className={cn('w-3 h-3 text-indigo-600', !expand && '!w-2.5 !h-2.5')} />
                 )}
                 {appDetail.mode === 'chat' && (
                   <ChatBot className={cn('w-3 h-3 text-[#1570EF]', !expand && '!w-2.5 !h-2.5')} />
@@ -280,7 +280,7 @@ const AppInfo = ({ expand }: IAppInfoProps) => {
                     <ChatBot className='w-3 h-3 text-[#1570EF]' />
                   )}
                   {appDetail.mode === 'agent-chat' && (
-                    <CuteRobote className='w-3 h-3 text-indigo-600' />
+                    <CuteRobot className='w-3 h-3 text-indigo-600' />
                   )}
                   {appDetail.mode === 'chat' && (
                     <ChatBot className='w-3 h-3 text-[#1570EF]' />
@@ -323,7 +323,7 @@ const AppInfo = ({ expand }: IAppInfoProps) => {
                 </div>
               </div>
             </div>
-            {/* desscription */}
+            {/* description */}
             {appDetail.description && (
               <div className='px-4 py-2 text-gray-500 text-xs leading-[18px]'>{appDetail.description}</div>
             )}

+ 2 - 2
web/app/components/app/annotation/index.tsx

@@ -232,8 +232,8 @@ const Annotation: FC<Props> = ({
             middlePagesSiblingCount={1}
             setCurrentPage={setCurrPage}
             totalPages={Math.ceil(total / APP_PAGE_LIMIT)}
-            truncableClassName="w-8 px-0.5 text-center"
-            truncableText="..."
+            truncatableClassName="w-8 px-0.5 text-center"
+            truncatableText="..."
           >
             <Pagination.PrevButton
               disabled={currPage === 0}

+ 2 - 2
web/app/components/app/annotation/view-annotation-modal/index.tsx

@@ -156,8 +156,8 @@ const ViewAnnotationModal: FC<Props> = ({
             middlePagesSiblingCount={1}
             setCurrentPage={setCurrPage}
             totalPages={Math.ceil(total / APP_PAGE_LIMIT)}
-            truncableClassName="w-8 px-0.5 text-center"
-            truncableText="..."
+            truncatableClassName="w-8 px-0.5 text-center"
+            truncatableText="..."
           >
             <Pagination.PrevButton
               disabled={currPage === 0}

+ 1 - 1
web/app/components/app/configuration/config-prompt/advanced-prompt-input.tsx

@@ -262,7 +262,7 @@ const AdvancedPromptInput: FC<Props> = ({
       {isShowConfirmAddVar && (
         <ConfirmAddVar
           varNameArr={newPromptVariables.map(v => v.name)}
-          onConfrim={handleAutoAdd(true)}
+          onConfirm={handleAutoAdd(true)}
           onCancel={handleAutoAdd(false)}
           onHide={hideConfirmAddVar}
         />

+ 3 - 3
web/app/components/app/configuration/config-prompt/confirm-add-var/index.tsx

@@ -7,7 +7,7 @@ import Button from '@/app/components/base/button'
 
 export type IConfirmAddVarProps = {
   varNameArr: string[]
-  onConfrim: () => void
+  onConfirm: () => void
   onCancel: () => void
   onHide: () => void
 }
@@ -22,7 +22,7 @@ const VarIcon = (
 
 const ConfirmAddVar: FC<IConfirmAddVarProps> = ({
   varNameArr,
-  onConfrim,
+  onConfirm,
   onCancel,
   // onHide,
 }) => {
@@ -63,7 +63,7 @@ const ConfirmAddVar: FC<IConfirmAddVarProps> = ({
         </div>
         <div className='mt-7 flex justify-end space-x-2'>
           <Button onClick={onCancel}>{t('common.operation.cancel')}</Button>
-          <Button variant='primary' onClick={onConfrim}>{t('common.operation.add')}</Button>
+          <Button variant='primary' onClick={onConfirm}>{t('common.operation.add')}</Button>
         </div>
       </div>
 

+ 0 - 0
web/app/components/app/configuration/config-prompt/conversation-histroy/edit-modal.tsx → web/app/components/app/configuration/config-prompt/conversation-history/edit-modal.tsx


+ 0 - 0
web/app/components/app/configuration/config-prompt/conversation-histroy/history-panel.tsx → web/app/components/app/configuration/config-prompt/conversation-history/history-panel.tsx


+ 2 - 2
web/app/components/app/configuration/config-prompt/simple-prompt-input.tsx

@@ -33,7 +33,7 @@ export type ISimplePromptInput = {
   promptTemplate: string
   promptVariables: PromptVariable[]
   readonly?: boolean
-  onChange?: (promp: string, promptVariables: PromptVariable[]) => void
+  onChange?: (prompt: string, promptVariables: PromptVariable[]) => void
   noTitle?: boolean
   gradientBorder?: boolean
   editorHeight?: number
@@ -239,7 +239,7 @@ const Prompt: FC<ISimplePromptInput> = ({
       {isShowConfirmAddVar && (
         <ConfirmAddVar
           varNameArr={newPromptVariables.map(v => v.name)}
-          onConfrim={handleAutoAdd(true)}
+          onConfirm={handleAutoAdd(true)}
           onCancel={handleAutoAdd(false)}
           onHide={hideConfirmAddVar}
         />

+ 2 - 2
web/app/components/app/configuration/config/agent/agent-setting/index.tsx

@@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next'
 import { RiCloseLine } from '@remixicon/react'
 import ItemPanel from './item-panel'
 import Button from '@/app/components/base/button'
-import { CuteRobote } from '@/app/components/base/icons/src/vender/solid/communication'
+import { CuteRobot } from '@/app/components/base/icons/src/vender/solid/communication'
 import { Unblur } from '@/app/components/base/icons/src/vender/solid/education'
 import Slider from '@/app/components/base/slider'
 import type { AgentConfig } from '@/models/debug'
@@ -65,7 +65,7 @@ const AgentSetting: FC<Props> = ({
           <ItemPanel
             className='mb-4'
             icon={
-              <CuteRobote className='w-4 h-4 text-indigo-600' />
+              <CuteRobot className='w-4 h-4 text-indigo-600' />
             }
             name={t('appDebug.agent.agentMode')}
             description={t('appDebug.agent.agentModeDes')}

+ 3 - 3
web/app/components/app/configuration/config/assistant-type-picker/index.tsx

@@ -12,7 +12,7 @@ import {
 } from '@/app/components/base/portal-to-follow-elem'
 import { BubbleText } from '@/app/components/base/icons/src/vender/solid/education'
 import Radio from '@/app/components/base/radio/ui'
-import { CuteRobote } from '@/app/components/base/icons/src/vender/solid/communication'
+import { CuteRobot } from '@/app/components/base/icons/src/vender/solid/communication'
 import { Settings04 } from '@/app/components/base/icons/src/vender/line/general'
 import { ArrowUpRight } from '@/app/components/base/icons/src/vender/line/arrows'
 import type { AgentConfig } from '@/models/debug'
@@ -117,7 +117,7 @@ const AssistantTypePicker: FC<Props> = ({
       >
         <PortalToFollowElemTrigger onClick={() => setOpen(v => !v)}>
           <div className={cn(open && 'bg-gray-50', 'flex items-center h-8 px-3 border border-black/5 rounded-lg cursor-pointer select-none space-x-1 text-indigo-600')}>
-            {isAgent ? <BubbleText className='w-3 h-3' /> : <CuteRobote className='w-3 h-3' />}
+            {isAgent ? <BubbleText className='w-3 h-3' /> : <CuteRobot className='w-3 h-3' />}
             <div className='text-xs font-medium'>{t(`appDebug.assistantType.${isAgent ? 'agentAssistant' : 'chatAssistant'}.name`)}</div>
             <RiArrowDownSLine className='w-3 h-3' />
           </div>
@@ -135,7 +135,7 @@ const AssistantTypePicker: FC<Props> = ({
               onClick={handleChange}
             />
             <SelectItem
-              Icon={CuteRobote}
+              Icon={CuteRobot}
               value='agent'
               disabled={disabled}
               text={t('appDebug.assistantType.agentAssistant.name')}

+ 2 - 2
web/app/components/app/configuration/config/feature/use-feature.tsx

@@ -35,7 +35,7 @@ function useFeature({
   moderation: boolean
   setModeration: (moderation: boolean) => void
 }) {
-  const [tempshowOpeningStatement, setTempShowOpeningStatement] = React.useState(!!introduction)
+  const [tempShowOpeningStatement, setTempShowOpeningStatement] = React.useState(!!introduction)
   useEffect(() => {
     // wait to api data back
     if (introduction)
@@ -48,7 +48,7 @@ function useFeature({
   // }, [moreLikeThis])
 
   const featureConfig = {
-    openingStatement: tempshowOpeningStatement,
+    openingStatement: tempShowOpeningStatement,
     moreLikeThis,
     suggestedQuestionsAfterAnswer,
     speechToText,

+ 4 - 4
web/app/components/app/configuration/config/index.tsx

@@ -7,9 +7,9 @@ import { useBoolean, useScroll } from 'ahooks'
 import { useFormattingChangedDispatcher } from '../debug/hooks'
 import DatasetConfig from '../dataset-config'
 import ChatGroup from '../features/chat-group'
-import ExperienceEnchanceGroup from '../features/experience-enchance-group'
+import ExperienceEnhanceGroup from '../features/experience-enhance-group'
 import Toolbox from '../toolbox'
-import HistoryPanel from '../config-prompt/conversation-histroy/history-panel'
+import HistoryPanel from '../config-prompt/conversation-history/history-panel'
 import ConfigVision from '../config-vision'
 import useAnnotationConfig from '../toolbox/annotation/use-annotation-config'
 import AddFeatureBtn from './feature/add-feature-btn'
@@ -254,7 +254,7 @@ const Config: FC = () => {
           />
         )}
 
-        {/* ChatConifig */}
+        {/* ChatConfig */}
         {
           hasChatConfig && (
             <ChatGroup
@@ -277,7 +277,7 @@ const Config: FC = () => {
 
         {/* Text Generation config */}{
           hasCompletionConfig && (
-            <ExperienceEnchanceGroup
+            <ExperienceEnhanceGroup
               isShowMoreLike={moreLikeThisConfig.enabled}
               isShowTextToSpeech={featureConfig.textToSpeech && !!text2speechDefaultModel}
             />

+ 2 - 2
web/app/components/app/configuration/dataset-config/params-config/index.tsx

@@ -70,13 +70,13 @@ const ParamsConfig = ({
 
   const {
     defaultModel: rerankDefaultModel,
-    currentModel: isRerankDefaultModelVaild,
+    currentModel: isRerankDefaultModelValid,
   } = useModelListAndDefaultModelAndCurrentProviderAndModel(ModelTypeEnum.rerank)
 
   const isValid = () => {
     let errMsg = ''
     if (tempDataSetConfigs.retrieval_model === RETRIEVE_TYPE.multiWay) {
-      if (!tempDataSetConfigs.reranking_model?.reranking_model_name && (!rerankDefaultModel && isRerankDefaultModelVaild))
+      if (!tempDataSetConfigs.reranking_model?.reranking_model_name && (!rerankDefaultModel && isRerankDefaultModelValid))
         errMsg = t('appDebug.datasetConfig.rerankModelRequired')
     }
     if (errMsg) {

+ 1 - 1
web/app/components/app/configuration/dataset-config/select-dataset/index.tsx

@@ -135,7 +135,7 @@ const SelectDataSet: FC<ISelectDataSetProps> = ({
                   </div>
                   <div className={cn('max-w-[200px] text-[13px] font-medium text-gray-800 overflow-hidden text-ellipsis whitespace-nowrap', !item.embedding_available && 'opacity-50 !max-w-[120px]')}>{item.name}</div>
                   {!item.embedding_available && (
-                    <span className='ml-1 shrink-0 px-1 border boder-gray-200 rounded-md text-gray-500 text-xs font-normal leading-[18px]'>{t('dataset.unavailable')}</span>
+                    <span className='ml-1 shrink-0 px-1 border border-gray-200 rounded-md text-gray-500 text-xs font-normal leading-[18px]'>{t('dataset.unavailable')}</span>
                   )}
                 </div>
                 {

+ 2 - 2
web/app/components/app/configuration/dataset-config/settings-modal/index.tsx

@@ -51,7 +51,7 @@ const SettingsModal: FC<SettingsModalProps> = ({
   const {
     modelList: rerankModelList,
     defaultModel: rerankDefaultModel,
-    currentModel: isRerankDefaultModelVaild,
+    currentModel: isRerankDefaultModelValid,
   } = useModelListAndDefaultModelAndCurrentProviderAndModel(ModelTypeEnum.rerank)
   const { t } = useTranslation()
   const { notify } = useToastContext()
@@ -83,7 +83,7 @@ const SettingsModal: FC<SettingsModalProps> = ({
     if (
       !isReRankModelSelected({
         rerankDefaultModel,
-        isRerankDefaultModelVaild: !!isRerankDefaultModelVaild,
+        isRerankDefaultModelValid: !!isRerankDefaultModelValid,
         rerankModelList,
         retrievalConfig,
         indexMethod,

+ 1 - 1
web/app/components/app/configuration/debug/debug-with-multiple-model/chat-item.tsx

@@ -89,7 +89,7 @@ const ChatItem: FC<ChatItemProps> = ({
       `apps/${appId}/chat-messages`,
       data,
       {
-        onGetConvesationMessages: (conversationId, getAbortController) => fetchConversationMessages(appId, conversationId, getAbortController),
+        onGetConversationMessages: (conversationId, getAbortController) => fetchConversationMessages(appId, conversationId, getAbortController),
         onGetSuggestedQuestions: (responseItemId, getAbortController) => fetchSuggestedQuestions(appId, responseItemId, getAbortController),
       },
     )

+ 1 - 1
web/app/components/app/configuration/debug/debug-with-single-model/index.tsx

@@ -94,7 +94,7 @@ const DebugWithSingleModel = forwardRef<DebugWithSingleModelRefType, DebugWithSi
       `apps/${appId}/chat-messages`,
       data,
       {
-        onGetConvesationMessages: (conversationId, getAbortController) => fetchConversationMessages(appId, conversationId, getAbortController),
+        onGetConversationMessages: (conversationId, getAbortController) => fetchConversationMessages(appId, conversationId, getAbortController),
         onGetSuggestedQuestions: (responseItemId, getAbortController) => fetchSuggestedQuestions(appId, responseItemId, getAbortController),
       },
     )

+ 1 - 1
web/app/components/app/configuration/features/chat-group/opening-statement/index.tsx

@@ -287,7 +287,7 @@ const OpeningStatement: FC<IOpeningStatementProps> = ({
         {isShowConfirmAddVar && (
           <ConfirmAddVar
             varNameArr={notIncludeKeys}
-            onConfrim={autoAddVar}
+            onConfirm={autoAddVar}
             onCancel={cancelAutoAddVar}
             onHide={hideConfirmAddVar}
           />

+ 2 - 2
web/app/components/app/configuration/features/experience-enchance-group/index.tsx → web/app/components/app/configuration/features/experience-enhance-group/index.tsx

@@ -16,7 +16,7 @@ type ExperienceGroupProps = {
   isShowMoreLike: boolean
 }
 
-const ExperienceEnchanceGroup: FC<ExperienceGroupProps> = ({
+const ExperienceEnhanceGroup: FC<ExperienceGroupProps> = ({
   isShowTextToSpeech,
   isShowMoreLike,
 }) => {
@@ -40,4 +40,4 @@ const ExperienceEnchanceGroup: FC<ExperienceGroupProps> = ({
     </div>
   )
 }
-export default React.memo(ExperienceEnchanceGroup)
+export default React.memo(ExperienceEnhanceGroup)

+ 0 - 0
web/app/components/app/configuration/features/experience-enchance-group/more-like-this/index.tsx → web/app/components/app/configuration/features/experience-enhance-group/more-like-this/index.tsx


+ 1 - 1
web/app/components/app/configuration/index.tsx

@@ -14,7 +14,7 @@ import Loading from '../../base/loading'
 import AppPublisher from '../app-publisher'
 import AgentSettingButton from './config/agent-setting-button'
 import useAdvancedPromptConfig from './hooks/use-advanced-prompt-config'
-import EditHistoryModal from './config-prompt/conversation-histroy/edit-modal'
+import EditHistoryModal from './config-prompt/conversation-history/edit-modal'
 import {
   useDebugWithSingleOrMultipleModel,
   useFormattingChangedDispatcher,

+ 5 - 5
web/app/components/app/configuration/toolbox/moderation/moderation-setting-modal.tsx

@@ -64,7 +64,7 @@ const ModerationSettingModal: FC<ModerationSettingModalProps> = ({
   const systemOpenaiProviderQuota = systemOpenaiProviderEnabled ? openaiProvider?.system_configuration.quota_configurations.find(item => item.quota_type === openaiProvider.system_configuration.current_quota_type) : undefined
   const systemOpenaiProviderCanUse = systemOpenaiProviderQuota?.is_valid
   const customOpenaiProvidersCanUse = openaiProvider?.custom_configuration.status === CustomConfigurationStatusEnum.active
-  const openaiProviderConfiged = customOpenaiProvidersCanUse || systemOpenaiProviderCanUse
+  const isOpenAIProviderConfigured = customOpenaiProvidersCanUse || systemOpenaiProviderCanUse
   const providers: Provider[] = [
     {
       key: 'openai_moderation',
@@ -190,7 +190,7 @@ const ModerationSettingModal: FC<ModerationSettingModalProps> = ({
   }
 
   const handleSave = () => {
-    if (localeData.type === 'openai_moderation' && !openaiProviderConfiged)
+    if (localeData.type === 'openai_moderation' && !isOpenAIProviderConfigured)
       return
 
     if (!localeData.config?.inputs_config?.enabled && !localeData.config?.outputs_config?.enabled) {
@@ -254,7 +254,7 @@ const ModerationSettingModal: FC<ModerationSettingModalProps> = ({
                 className={`
                   flex items-center px-3 py-2 rounded-lg text-sm text-gray-900 cursor-pointer
                   ${localeData.type === provider.key ? 'bg-white border-[1.5px] border-primary-400 shadow-sm' : 'border border-gray-100 bg-gray-25'}
-                  ${localeData.type === 'openai_moderation' && provider.key === 'openai_moderation' && !openaiProviderConfiged && 'opacity-50'}
+                  ${localeData.type === 'openai_moderation' && provider.key === 'openai_moderation' && !isOpenAIProviderConfigured && 'opacity-50'}
                 `}
                 onClick={() => handleDataTypeChange(provider.key)}
               >
@@ -267,7 +267,7 @@ const ModerationSettingModal: FC<ModerationSettingModalProps> = ({
           }
         </div>
         {
-          !isLoading && !openaiProviderConfiged && localeData.type === 'openai_moderation' && (
+          !isLoading && !isOpenAIProviderConfigured && localeData.type === 'openai_moderation' && (
             <div className='flex items-center mt-2 px-3 py-2 bg-[#FFFAEB] rounded-lg border border-[#FEF0C7]'>
               <InfoCircle className='mr-1 w-4 h-4 text-[#F79009]' />
               <div className='flex items-center text-xs font-medium text-gray-700'>
@@ -361,7 +361,7 @@ const ModerationSettingModal: FC<ModerationSettingModalProps> = ({
         <Button
           variant='primary'
           onClick={handleSave}
-          disabled={localeData.type === 'openai_moderation' && !openaiProviderConfiged}
+          disabled={localeData.type === 'openai_moderation' && !isOpenAIProviderConfigured}
         >
           {t('common.operation.save')}
         </Button>

+ 3 - 3
web/app/components/app/configuration/tools/external-data-tool-modal.tsx

@@ -172,12 +172,12 @@ const ExternalDataToolModal: FC<ExternalDataToolModalProps> = ({
       }
     }
 
-    const formatedData = formatData(localeData)
+    const formattedData = formatData(localeData)
 
-    if (onValidateBeforeSave && !onValidateBeforeSave(formatedData))
+    if (onValidateBeforeSave && !onValidateBeforeSave(formattedData))
       return
 
-    onSave(formatData(formatedData))
+    onSave(formatData(formattedData))
   }
 
   const action = data.type ? t('common.operation.edit') : t('common.operation.add')

+ 2 - 2
web/app/components/app/create-app-modal/index.tsx

@@ -21,7 +21,7 @@ import Modal from '@/app/components/base/modal'
 import Button from '@/app/components/base/button'
 import AppIcon from '@/app/components/base/app-icon'
 import AppsFull from '@/app/components/billing/apps-full-in-dialog'
-import { AiText, ChatBot, CuteRobote } from '@/app/components/base/icons/src/vender/solid/communication'
+import { AiText, ChatBot, CuteRobot } from '@/app/components/base/icons/src/vender/solid/communication'
 import { Route } from '@/app/components/base/icons/src/vender/solid/mapsAndTravel'
 import Tooltip from '@/app/components/base/tooltip'
 import { NEED_REFRESH_APP_LIST_KEY } from '@/config'
@@ -158,7 +158,7 @@ const CreateAppModal = ({ show, onSuccess, onClose }: CreateAppDialogProps) => {
                 setShowChatBotType(false)
               }}
             >
-              <CuteRobote className='w-6 h-6 text-indigo-600' />
+              <CuteRobot className='w-6 h-6 text-indigo-600' />
               <div className='h-5 text-[13px] font-medium leading-[18px]'>{t('app.types.agent')}</div>
             </div>
           </Tooltip>

+ 2 - 2
web/app/components/app/log/index.tsx

@@ -119,8 +119,8 @@ const Logs: FC<ILogsProps> = ({ appDetail }) => {
             middlePagesSiblingCount={1}
             setCurrentPage={setCurrPage}
             totalPages={Math.ceil(total / APP_PAGE_LIMIT)}
-            truncableClassName="w-8 px-0.5 text-center"
-            truncableText="..."
+            truncatableClassName="w-8 px-0.5 text-center"
+            truncatableText="..."
           >
             <Pagination.PrevButton
               disabled={currPage === 0}

+ 3 - 3
web/app/components/app/log/list.tsx

@@ -19,7 +19,7 @@ import { useTranslation } from 'react-i18next'
 import s from './style.module.css'
 import VarPanel from './var-panel'
 import cn from '@/utils/classnames'
-import type { FeedbackFunc, Feedbacktype, IChatItem, SubmitAnnotationFunc } from '@/app/components/base/chat/chat/type'
+import type { FeedbackFunc, FeedbackType, IChatItem, SubmitAnnotationFunc } from '@/app/components/base/chat/chat/type'
 import type { Annotation, ChatConversationFullDetailResponse, ChatConversationGeneralDetail, ChatConversationsResponse, ChatMessage, ChatMessagesRequest, CompletionConversationFullDetailResponse, CompletionConversationGeneralDetail, CompletionConversationsResponse, LogAnnotation } from '@/models/log'
 import type { App } from '@/types/app'
 import Loading from '@/app/components/base/loading'
@@ -541,7 +541,7 @@ const CompletionConversationDetailComp: FC<{ appId?: string; conversationId?: st
   const { notify } = useContext(ToastContext)
   const { t } = useTranslation()
 
-  const handleFeedback = async (mid: string, { rating }: Feedbacktype): Promise<boolean> => {
+  const handleFeedback = async (mid: string, { rating }: FeedbackType): Promise<boolean> => {
     try {
       await updateLogMessageFeedbacks({ url: `/apps/${appId}/feedbacks`, body: { message_id: mid, rating } })
       conversationDetailMutate()
@@ -586,7 +586,7 @@ const ChatConversationDetailComp: FC<{ appId?: string; conversationId?: string }
   const { notify } = useContext(ToastContext)
   const { t } = useTranslation()
 
-  const handleFeedback = async (mid: string, { rating }: Feedbacktype): Promise<boolean> => {
+  const handleFeedback = async (mid: string, { rating }: FeedbackType): Promise<boolean> => {
     try {
       await updateLogMessageFeedbacks({ url: `/apps/${appId}/feedbacks`, body: { message_id: mid, rating } })
       notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') })

+ 7 - 7
web/app/components/app/text-generate/item/index.tsx

@@ -16,13 +16,13 @@ import { Markdown } from '@/app/components/base/markdown'
 import Loading from '@/app/components/base/loading'
 import Toast from '@/app/components/base/toast'
 import AudioBtn from '@/app/components/base/audio-btn'
-import type { Feedbacktype } from '@/app/components/base/chat/chat/type'
+import type { FeedbackType } from '@/app/components/base/chat/chat/type'
 import { fetchMoreLikeThis, updateFeedback } from '@/service/share'
 import { File02 } from '@/app/components/base/icons/src/vender/line/files'
 import { Bookmark } from '@/app/components/base/icons/src/vender/line/general'
 import { Stars02 } from '@/app/components/base/icons/src/vender/line/weather'
 import { RefreshCcw01 } from '@/app/components/base/icons/src/vender/line/arrows'
-import { fetchTextGenerationMessge } from '@/service/debug'
+import { fetchTextGenerationMessage } from '@/service/debug'
 import AnnotationCtrlBtn from '@/app/components/app/configuration/toolbox/annotation/annotation-ctrl-btn'
 import EditReplyModal from '@/app/components/app/annotation/edit-annotation-modal'
 import { useStore as useAppStore } from '@/app/components/app/store'
@@ -47,8 +47,8 @@ export type IGenerationItemProps = {
   isInWebApp?: boolean
   moreLikeThis?: boolean
   depth?: number
-  feedback?: Feedbacktype
-  onFeedback?: (feedback: Feedbacktype) => void
+  feedback?: FeedbackType
+  onFeedback?: (feedback: FeedbackType) => void
   onSave?: (messageId: string) => void
   isMobile?: boolean
   isInstalledApp: boolean
@@ -125,7 +125,7 @@ const GenerationItem: FC<IGenerationItemProps> = ({
   const [completionRes, setCompletionRes] = useState('')
   const [childMessageId, setChildMessageId] = useState<string | null>(null)
   const hasChild = !!childMessageId
-  const [childFeedback, setChildFeedback] = useState<Feedbacktype>({
+  const [childFeedback, setChildFeedback] = useState<FeedbackType>({
     rating: null,
   })
   const {
@@ -135,7 +135,7 @@ const GenerationItem: FC<IGenerationItemProps> = ({
   const setCurrentLogItem = useAppStore(s => s.setCurrentLogItem)
   const setShowPromptLogModal = useAppStore(s => s.setShowPromptLogModal)
 
-  const handleFeedback = async (childFeedback: Feedbacktype) => {
+  const handleFeedback = async (childFeedback: FeedbackType) => {
     await updateFeedback({ url: `/messages/${childMessageId}/feedbacks`, body: { rating: childFeedback.rating } }, isInstalledApp, installedAppId)
     setChildFeedback(childFeedback)
   }
@@ -205,7 +205,7 @@ const GenerationItem: FC<IGenerationItemProps> = ({
   }, [isLoading])
 
   const handleOpenLogModal = async () => {
-    const data = await fetchTextGenerationMessge({
+    const data = await fetchTextGenerationMessage({
       appId: params.appId as string,
       messageId: messageId!,
     })

+ 3 - 3
web/app/components/app/type-selector/index.tsx

@@ -9,7 +9,7 @@ import {
 } from '@/app/components/base/portal-to-follow-elem'
 import { Check, DotsGrid } from '@/app/components/base/icons/src/vender/line/general'
 import { XCircle } from '@/app/components/base/icons/src/vender/solid/general'
-import { ChatBot, CuteRobote } from '@/app/components/base/icons/src/vender/solid/communication'
+import { ChatBot, CuteRobot } from '@/app/components/base/icons/src/vender/solid/communication'
 import { Route } from '@/app/components/base/icons/src/vender/solid/mapsAndTravel'
 export type AppSelectorProps = {
   value: string
@@ -65,7 +65,7 @@ const AppTypeSelector = ({ value, onChange }: AppSelectorProps) => {
             {value === 'agent' && (
               <>
                 <div className='w-4 h-4 p-[1px]'>
-                  <CuteRobote className='w-3.5 h-3.5 text-indigo-600' />
+                  <CuteRobot className='w-3.5 h-3.5 text-indigo-600' />
                 </div>
                 <div className=''>{t('app.typeSelector.agent')}</div>
                 <div className='w-4 h-4 p-[1px]' onClick={(e) => {
@@ -106,7 +106,7 @@ const AppTypeSelector = ({ value, onChange }: AppSelectorProps) => {
               onChange('agent')
               setOpen(false)
             }}>
-              <CuteRobote className='mr-2 w-4 h-4 text-indigo-600' />
+              <CuteRobot className='mr-2 w-4 h-4 text-indigo-600' />
               <div className='grow text-gray-700 text-[13px] font-medium leading-[18px]'>{t('app.typeSelector.agent')}</div>
               {value === 'agent' && <Check className='w-4 h-4 text-primary-600' />}
             </div>

+ 2 - 2
web/app/components/app/workflow-log/index.tsx

@@ -93,8 +93,8 @@ const Logs: FC<ILogsProps> = ({ appDetail }) => {
             middlePagesSiblingCount={1}
             setCurrentPage={setCurrPage}
             totalPages={Math.ceil(total / APP_PAGE_LIMIT)}
-            truncableClassName="w-8 px-0.5 text-center"
-            truncableText="..."
+            truncatableClassName="w-8 px-0.5 text-center"
+            truncatableText="..."
           >
             <Pagination.PrevButton
               disabled={currPage === 0}

+ 1 - 1
web/app/components/base/agent-log-modal/detail.tsx

@@ -97,7 +97,7 @@ const AgentLogDetail: FC<AgentLogDetailProps> = ({
           onClick={() => switchTab('TRACING')}
         >{t('runLog.tracing')}</div>
       </div>
-      {/* panel detal */}
+      {/* panel detail */}
       <div className={cn('grow bg-white h-0 overflow-y-auto rounded-b-2xl', currentTab !== 'DETAIL' && '!bg-gray-50')}>
         {loading && (
           <div className='flex h-full items-center justify-center bg-white'>

+ 2 - 2
web/app/components/base/block-input/index.tsx

@@ -53,7 +53,7 @@ const BlockInput: FC<IBlockInputProps> = ({
   const [isEditing, setIsEditing] = useState<boolean>(false)
   useEffect(() => {
     if (isEditing && contentEditableRef.current) {
-      // TODO: Focus at the click positon
+      // TODO: Focus at the click position
       if (currentValue)
         contentEditableRef.current.setSelectionRange(currentValue.length, currentValue.length)
 
@@ -119,7 +119,7 @@ const BlockInput: FC<IBlockInputProps> = ({
             onBlur={() => {
               blur()
               setIsEditing(false)
-              // click confirm also make blur. Then outter value is change. So below code has problem.
+              // click confirm also make blur. Then outer value is change. So below code has problem.
               // setTimeout(() => {
               //   handleCancel()
               // }, 1000)

+ 4 - 4
web/app/components/base/chat/chat-with-history/hooks.tsx

@@ -217,12 +217,12 @@ export const useChatWithHistory = (installedAppInfo?: InstalledApp) => {
   }, [newConversation])
 
   const currentConversationItem = useMemo(() => {
-    let coversationItem = conversationList.find(item => item.id === currentConversationId)
+    let conversationItem = conversationList.find(item => item.id === currentConversationId)
 
-    if (!coversationItem && pinnedConversationList.length)
-      coversationItem = pinnedConversationList.find(item => item.id === currentConversationId)
+    if (!conversationItem && pinnedConversationList.length)
+      conversationItem = pinnedConversationList.find(item => item.id === currentConversationId)
 
-    return coversationItem
+    return conversationItem
   }, [conversationList, currentConversationId, pinnedConversationList])
 
   const { notify } = useToastContext()

+ 4 - 4
web/app/components/base/chat/chat/citation/index.tsx

@@ -24,7 +24,7 @@ const Citation: FC<CitationProps> = ({
 }) => {
   const { t } = useTranslation()
   const elesRef = useRef<HTMLDivElement[]>([])
-  const [limitNumberInOneLine, setlimitNumberInOneLine] = useState(0)
+  const [limitNumberInOneLine, setLimitNumberInOneLine] = useState(0)
   const [showMore, setShowMore] = useState(false)
   const resources = useMemo(() => data.reduce((prev: Resources[], next) => {
     const documentId = next.document_id
@@ -57,14 +57,14 @@ const Citation: FC<CitationProps> = ({
         totalWidth -= elesRef.current[i].clientWidth
 
         if (totalWidth + 34 > containerWidth!)
-          setlimitNumberInOneLine(i - 1)
+          setLimitNumberInOneLine(i - 1)
         else
-          setlimitNumberInOneLine(i)
+          setLimitNumberInOneLine(i)
 
         break
       }
       else {
-        setlimitNumberInOneLine(i + 1)
+        setLimitNumberInOneLine(i + 1)
       }
     }
   }

+ 4 - 4
web/app/components/base/chat/chat/hooks.ts

@@ -26,7 +26,7 @@ import { AudioPlayerManager } from '@/app/components/base/audio-btn/audio.player
 
 type GetAbortController = (abortController: AbortController) => void
 type SendCallback = {
-  onGetConvesationMessages?: (conversationId: string, getAbortController: GetAbortController) => Promise<any>
+  onGetConversationMessages?: (conversationId: string, getAbortController: GetAbortController) => Promise<any>
   onGetSuggestedQuestions?: (responseItemId: string, getAbortController: GetAbortController) => Promise<any>
   onConversationComplete?: (conversationId: string) => void
   isPublicAPI?: boolean
@@ -198,7 +198,7 @@ export const useChat = (
     url: string,
     data: any,
     {
-      onGetConvesationMessages,
+      onGetConversationMessages,
       onGetSuggestedQuestions,
       onConversationComplete,
       isPublicAPI,
@@ -324,8 +324,8 @@ export const useChat = (
           if (onConversationComplete)
             onConversationComplete(conversationId.current)
 
-          if (conversationId.current && !hasStopResponded.current && onGetConvesationMessages) {
-            const { data }: any = await onGetConvesationMessages(
+          if (conversationId.current && !hasStopResponded.current && onGetConversationMessages) {
+            const { data }: any = await onGetConversationMessages(
               conversationId.current,
               newAbortController => conversationMessagesAbortControllerRef.current = newAbortController,
             )

Some files were not shown because too many files changed in this diff