claude bugpass
This commit is contained in:
@@ -61,7 +61,7 @@ def _call_llm_sync(system_prompt, user_prompt):
|
|||||||
return extracted
|
return extracted
|
||||||
return None
|
return None
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"LLM error: {type(e).__name__}: {e}", flush=True)
|
print(f"LLM error ({AI_CONFIG['model']}): {type(e).__name__}: {e}", flush=True)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
@@ -119,7 +119,7 @@ async def parse(user_input, interaction_type, retry_count=0, errors=None, histor
|
|||||||
|
|
||||||
response_text = await _call_llm(prompt_config["system"], user_prompt)
|
response_text = await _call_llm(prompt_config["system"], user_prompt)
|
||||||
if not response_text:
|
if not response_text:
|
||||||
return {"error": "AI service unavailable", "user_input": user_input}
|
return {"error": f"AI service unavailable (model: {AI_CONFIG['model']})", "user_input": user_input}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
parsed = json.loads(response_text)
|
parsed = json.loads(response_text)
|
||||||
|
|||||||
@@ -17,10 +17,16 @@ from ai.parser import client
|
|||||||
# Configuration
|
# Configuration
|
||||||
EPUBS_DIRECTORY = os.getenv("KNOWLEDGE_EMBEDDINGS_DIR", "./bot/data")
|
EPUBS_DIRECTORY = os.getenv("KNOWLEDGE_EMBEDDINGS_DIR", "./bot/data")
|
||||||
TOP_K_CHUNKS = 5
|
TOP_K_CHUNKS = 5
|
||||||
EMBEDDING_MODEL = "sentence-transformers/all-minilm-l12-v2"
|
|
||||||
CHAT_MODEL = "deepseek/deepseek-v3.2"
|
CHAT_MODEL = "deepseek/deepseek-v3.2"
|
||||||
EMBEDDING_EXTENSION = ".embeddings.json"
|
EMBEDDING_EXTENSION = ".embeddings.json"
|
||||||
|
|
||||||
|
# Map embedding dimensions to the model that produced them
|
||||||
|
EMBEDDING_MODELS_BY_DIM = {
|
||||||
|
384: "sentence-transformers/all-minilm-l12-v2",
|
||||||
|
4096: "qwen/qwen3-embedding-8b",
|
||||||
|
}
|
||||||
|
DEFAULT_EMBEDDING_MODEL = "sentence-transformers/all-minilm-l12-v2"
|
||||||
|
|
||||||
# Cache for loaded embeddings: {file_path: (chunks, embeddings, metadata)}
|
# Cache for loaded embeddings: {file_path: (chunks, embeddings, metadata)}
|
||||||
_knowledge_cache: Dict[str, Tuple[List[str], List[List[float]], dict]] = {}
|
_knowledge_cache: Dict[str, Tuple[List[str], List[List[float]], dict]] = {}
|
||||||
|
|
||||||
@@ -79,9 +85,14 @@ def load_knowledge_base(
|
|||||||
return _knowledge_cache[file_path]
|
return _knowledge_cache[file_path]
|
||||||
|
|
||||||
|
|
||||||
def get_query_embedding(query: str) -> List[float]:
|
def get_embedding_model_for_dim(dim: int) -> str:
|
||||||
|
"""Get the correct embedding model for a given dimension."""
|
||||||
|
return EMBEDDING_MODELS_BY_DIM.get(dim, DEFAULT_EMBEDDING_MODEL)
|
||||||
|
|
||||||
|
|
||||||
|
def get_query_embedding(query: str, model: str = DEFAULT_EMBEDDING_MODEL) -> List[float]:
|
||||||
"""Embed the user's question via OpenRouter."""
|
"""Embed the user's question via OpenRouter."""
|
||||||
response = client.embeddings.create(model=EMBEDDING_MODEL, input=query)
|
response = client.embeddings.create(model=model, input=query)
|
||||||
return response.data[0].embedding
|
return response.data[0].embedding
|
||||||
|
|
||||||
|
|
||||||
@@ -271,8 +282,12 @@ async def handle_knowledge(message, session, parsed):
|
|||||||
await message.channel.send(f"🔍 Searching **{book_title}**...")
|
await message.channel.send(f"🔍 Searching **{book_title}**...")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
# Detect embedding dimension and use matching model
|
||||||
|
emb_dim = len(embeddings[0]) if embeddings else 384
|
||||||
|
embedding_model = get_embedding_model_for_dim(emb_dim)
|
||||||
|
|
||||||
# Get query embedding and search
|
# Get query embedding and search
|
||||||
query_emb = get_query_embedding(query)
|
query_emb = get_query_embedding(query, model=embedding_model)
|
||||||
relevant_chunks, scores = search_context(
|
relevant_chunks, scores = search_context(
|
||||||
query_emb, chunks, embeddings, TOP_K_CHUNKS
|
query_emb, chunks, embeddings, TOP_K_CHUNKS
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user