default text embedding with local node

This commit is contained in:
tsukasa
2023-09-26 16:37:30 +08:00
parent 411ab61880
commit cf2d917404
3 changed files with 14 additions and 14 deletions
+11 -10
View File
@@ -20,6 +20,7 @@ class KnowledgeBase:
def __singleton_init__(self) -> None: def __singleton_init__(self) -> None:
self.store = KnowledgeStore() self.store = KnowledgeStore()
self.compute_kernel = ComputeKernel.get_instance() self.compute_kernel = ComputeKernel.get_instance()
self._default_text_model = "all-MiniLM-L6-v2"
async def __embedding_document(self, document: DocumentObject): async def __embedding_document(self, document: DocumentObject):
for chunk_id in document.get_chunk_list(): for chunk_id in document.get_chunk_list():
@@ -28,8 +29,8 @@ class KnowledgeBase:
raise ValueError(f"text chunk not found: {chunk_id}") raise ValueError(f"text chunk not found: {chunk_id}")
text = chunk.read().decode("utf-8") text = chunk.read().decode("utf-8")
vector = await self.compute_kernel.do_text_embedding(text) vector = await self.compute_kernel.do_text_embedding(text, self._default_text_model)
await self.store.get_vector_store("default").insert(vector, chunk_id) await self.store.get_vector_store(self._default_text_model).insert(vector, chunk_id)
async def __embedding_image(self, image: ImageObject): async def __embedding_image(self, image: ImageObject):
desc = {} desc = {}
@@ -39,8 +40,8 @@ class KnowledgeBase:
desc["exif"] = image.get_exif() desc["exif"] = image.get_exif()
if not not image.get_tags(): if not not image.get_tags():
desc["tags"] = image.get_tags() desc["tags"] = image.get_tags()
vector = await self.compute_kernel.do_text_embedding(json.dumps(desc)) vector = await self.compute_kernel.do_text_embedding(json.dumps(desc), self._default_text_model)
await self.store.get_vector_store("default").insert(vector, image.calculate_id()) await self.store.get_vector_store(self._default_text_model).insert(vector, image.calculate_id())
async def __embedding_video(self, vedio: VideoObject): async def __embedding_video(self, vedio: VideoObject):
desc = {} desc = {}
@@ -50,8 +51,8 @@ class KnowledgeBase:
desc["info"] = vedio.get_info() desc["info"] = vedio.get_info()
if not not vedio.get_tags(): if not not vedio.get_tags():
desc["tags"] = vedio.get_tags() desc["tags"] = vedio.get_tags()
vector = await self.compute_kernel.do_text_embedding(json.dumps(desc)) vector = await self.compute_kernel.do_text_embedding(json.dumps(desc), self._default_text_model)
await self.store.get_vector_store("default").insert(vector, vedio.calculate_id()) await self.store.get_vector_store(self._default_text_model).insert(vector, vedio.calculate_id())
async def __embedding_rich_text(self, rich_text: RichTextObject): async def __embedding_rich_text(self, rich_text: RichTextObject):
for document_id in rich_text.get_documents().values(): for document_id in rich_text.get_documents().values():
@@ -68,8 +69,8 @@ class KnowledgeBase:
await self.__embedding_rich_text(rich_text) await self.__embedding_rich_text(rich_text)
async def __embedding_email(self, email: EmailObject): async def __embedding_email(self, email: EmailObject):
vector = await self.compute_kernel.do_text_embedding(json.dumps(email.get_desc())) vector = await self.compute_kernel.do_text_embedding(json.dumps(email.get_desc()), self._default_text_model)
await self.store.get_vector_store("default").insert(vector, email.calculate_id()) await self.store.get_vector_store(self._default_text_model).insert(vector, email.calculate_id())
await self.__embedding_rich_text(email.get_rich_text()) await self.__embedding_rich_text(email.get_rich_text())
@@ -172,8 +173,8 @@ class KnowledgeBase:
results = [] results = []
for msg in prompt.messages: for msg in prompt.messages:
if msg["role"] == "user": if msg["role"] == "user":
vector = await self.compute_kernel.do_text_embedding(msg["content"]) vector = await self.compute_kernel.do_text_embedding(msg["content"], self._default_text_model)
object_ids = await self.store.get_vector_store("default").query(vector, 10) object_ids = await self.store.get_vector_store(self._default_text_model).query(vector, 10)
results.extend(object_ids) results.extend(object_ids)
return results return results
+1 -1
View File
@@ -89,7 +89,7 @@ class LocalSentenceTransformer_ComputeNode(Queue_ComputeNode):
def is_support(self, task: ComputeTask) -> bool: def is_support(self, task: ComputeTask) -> bool:
return task.task_type == ComputeTaskType.TEXT_EMBEDDING and ( return task.task_type == ComputeTaskType.TEXT_EMBEDDING and (
not task.params["model_name"] or task.params["model_name"] == "llama" not task.params["model_name"] or task.params["model_name"] == "all-MiniLM-L6-v2"
) )
def is_local(self) -> bool: def is_local(self) -> bool:
+2 -3
View File
@@ -3,14 +3,14 @@ import hashlib
import re import re
import tiktoken import tiktoken
import logging import logging
from typing import Tuple, List from typing import Callable, Iterable, Optional, Tuple, List
from .chunk_store import ChunkStore from .chunk_store import ChunkStore
from .chunk import ChunkID, PositionFileRange, PositionType from .chunk import ChunkID, PositionFileRange, PositionType
from ..object import HashValue from ..object import HashValue
from .tracker import ChunkTracker from .tracker import ChunkTracker
from .chunk_list import ChunkList from .chunk_list import ChunkList
def _join_docs(self, docs: List[str], separator: str) -> Optional[str]: def _join_docs(docs: List[str], separator: str) -> Optional[str]:
text = separator.join(docs) text = separator.join(docs)
text = text.strip() text = text.strip()
if text == "": if text == "":
@@ -19,7 +19,6 @@ def _join_docs(self, docs: List[str], separator: str) -> Optional[str]:
return text return text
def _merge_splits( def _merge_splits(
self,
splits: Iterable[str], splits: Iterable[str],
separator: str, separator: str,
chunk_size: int, chunk_size: int,