Some checks failed
tests / core (macos-latest, py3.11) (push) Has been cancelled
tests / core (macos-latest, py3.12) (push) Has been cancelled
tests / core (macos-latest, py3.13) (push) Has been cancelled
tests / core (ubuntu-latest, py3.11) (push) Has been cancelled
tests / core (ubuntu-latest, py3.12) (push) Has been cancelled
tests / core (ubuntu-latest, py3.13) (push) Has been cancelled
tests / doctor CLI smoke test (push) Has been cancelled
48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
DEFAULT_CHAT_MODEL = "openrouter/minimax/minimax-m2.5:free"
|
|
|
|
SYSTEM_PROMPT = (
|
|
"Answer ONLY using the provided context. Cite which parts you're drawing "
|
|
"from. If the context doesn't cover something, say 'not in my documents'."
|
|
)
|
|
|
|
|
|
def retrieve(embeddings: Any, query: str, limit: int = 3) -> list[dict]:
|
|
"""Search embeddings and return results with scores."""
|
|
return embeddings.search(query, limit)
|
|
|
|
|
|
def ask_wllm(
|
|
embeddings: Any,
|
|
question: str,
|
|
model: str = DEFAULT_CHAT_MODEL,
|
|
limit: int = 3,
|
|
) -> str:
|
|
"""RAG: retrieve context from embeddings, then answer with an LLM."""
|
|
try:
|
|
import litellm
|
|
except ImportError as exc:
|
|
raise ImportError("ask_wllm needs litellm: uv sync --extra kg") from exc
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
results = retrieve(embeddings, question, limit)
|
|
context = "\n\n".join([r["text"] for r in results])
|
|
|
|
response = litellm.completion(
|
|
model=model,
|
|
messages=[
|
|
{"role": "system", "content": SYSTEM_PROMPT},
|
|
{
|
|
"role": "user",
|
|
"content": f"Context from my documents:\n{context}\n\nQuestion: {question}",
|
|
},
|
|
],
|
|
)
|
|
|
|
return response.choices[0].message.content
|