mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-09 23:36:02 +00:00
* feat: add monitor * feat: fix tab * feat: work * feat: not reliable monitor * feat: enhance monitoring page layout with integrated filters and refresh button * feat: add support for runner recording * feat: add jump button & alignment * feat: new * fix: not show query variables in local agent * fix: pnpm lint and python ruff check * fix: ruff fromat * chore: remove unnecessary migration * style: optimize monitoring page layout and fix sticky filter issues - Enhanced metric cards with gradient backgrounds and hover effects - Increased traffic chart height from 200px to 300px - Adjusted grid layout and spacing for better visual appeal - Fixed sticky filter area to properly cover parent padding without transparent gaps - Used negative margins and positioning to eliminate scrolling artifacts - Matched padding/margins with other pages (pipelines, bots) for consistency - Removed duplicate title/subtitle from page content - Added cursor-pointer styling to tab triggers - Removed border between tab list and tab content Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix: apply prettier formatting to monitoring components - Fixed indentation and spacing in MetricCard.tsx - Fixed formatting in TrafficChart.tsx - Applied prettier formatting to page.tsx Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * feat: update HomeSidebar to trigger action on child selection and localize monitoring titles * refactor: streamline LLM and embedding invocation methods * feat: add embedding model monitor * fix: database version * chore: simplify pnpm-lock.yaml formatting --------- Co-authored-by: Junyan Qin <rockchinq@gmail.com> Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
54 lines
2.0 KiB
Python
54 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
from . import base_service
|
|
from ....core import app
|
|
from ....provider.modelmgr.requester import RuntimeEmbeddingModel
|
|
from langbot_plugin.api.entities.builtin.rag import context as rag_context
|
|
from langbot_plugin.api.entities.builtin.provider.message import ContentElement
|
|
|
|
|
|
class Retriever(base_service.BaseService):
|
|
def __init__(self, ap: app.Application):
|
|
super().__init__()
|
|
self.ap = ap
|
|
|
|
async def retrieve(
|
|
self, kb_id: str, query: str, embedding_model: RuntimeEmbeddingModel, k: int = 5
|
|
) -> list[rag_context.RetrievalResultEntry]:
|
|
self.ap.logger.info(
|
|
f"Retrieving for query: '{query[:10]}' with k={k} using {embedding_model.model_entity.uuid}"
|
|
)
|
|
|
|
query_embedding: list[float] = await embedding_model.provider.invoke_embedding(
|
|
model=embedding_model,
|
|
input_text=[query],
|
|
extra_args={}, # TODO: add extra args
|
|
knowledge_base_id=kb_id,
|
|
query_text=query,
|
|
call_type='retrieve',
|
|
)
|
|
|
|
vector_results = await self.ap.vector_db_mgr.vector_db.search(kb_id, query_embedding[0], k)
|
|
|
|
# 'ids' shape mirrors the Chroma-style response contract for compatibility
|
|
matched_vector_ids = vector_results.get('ids', [[]])[0]
|
|
distances = vector_results.get('distances', [[]])[0]
|
|
vector_metadatas = vector_results.get('metadatas', [[]])[0]
|
|
|
|
if not matched_vector_ids:
|
|
self.ap.logger.info('No relevant chunks found in vector database.')
|
|
return []
|
|
|
|
result: list[rag_context.RetrievalResultEntry] = []
|
|
|
|
for i, id in enumerate(matched_vector_ids):
|
|
entry = rag_context.RetrievalResultEntry(
|
|
id=id,
|
|
content=[ContentElement.from_text(vector_metadatas[i].get('text', ''))],
|
|
metadata=vector_metadatas[i],
|
|
distance=distances[i],
|
|
)
|
|
result.append(entry)
|
|
|
|
return result
|