Spaces:
Runtime error
Runtime error
tomas.helmfridsson commited on
Commit ·
3ebf529
1
Parent(s): 849e3ea
adjust inputs
Browse files
app.py
CHANGED
|
@@ -82,10 +82,12 @@ def test_retrieval(q): # snabb‑test utan AI
|
|
| 82 |
docs = retriever.invoke(q)
|
| 83 |
return "\n\n".join([f"{i+1}. ({d.metadata['source']}) {d.page_content[:160]}…" for i, d in enumerate(docs)]) or "🚫 Inga träffar"
|
| 84 |
|
| 85 |
-
def chat_fn(q, temp, history):
|
| 86 |
history = history or []
|
| 87 |
history.append({"role": "user", "content": q})
|
| 88 |
|
|
|
|
|
|
|
| 89 |
docs = retriever.invoke(q)
|
| 90 |
if not docs:
|
| 91 |
history.append({"role": "assistant", "content": "🚫 Hittade inget relevant."})
|
|
@@ -95,16 +97,34 @@ def chat_fn(q, temp, history):
|
|
| 95 |
chunk_info = "\n\n".join([f"{i+1}. ({d.metadata['source']}) {d.page_content[:160]}…" for i, d in enumerate(docs)])
|
| 96 |
history.append({"role": "system", "content": f"🔎 Chunkar som används:\n{chunk_info}"})
|
| 97 |
|
| 98 |
-
prompt
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 102 |
|
| 103 |
try:
|
| 104 |
ans = gen_pipe(
|
| 105 |
prompt,
|
| 106 |
temperature=float(temp),
|
| 107 |
-
max_new_tokens=
|
| 108 |
pad_token_id=tokenizer.eos_token_id,
|
| 109 |
eos_token_id=tokenizer.eos_token_id,
|
| 110 |
do_sample=True,
|
|
|
|
| 82 |
docs = retriever.invoke(q)
|
| 83 |
return "\n\n".join([f"{i+1}. ({d.metadata['source']}) {d.page_content[:160]}…" for i, d in enumerate(docs)]) or "🚫 Inga träffar"
|
| 84 |
|
| 85 |
+
def chat_fn(q, temp, max_new_tokens, k, ctx_tok_max, history):
|
| 86 |
history = history or []
|
| 87 |
history.append({"role": "user", "content": q})
|
| 88 |
|
| 89 |
+
# Skapa en ny retriever med valt k
|
| 90 |
+
retriever = vs.as_retriever(search_kwargs={"k": int(k)})
|
| 91 |
docs = retriever.invoke(q)
|
| 92 |
if not docs:
|
| 93 |
history.append({"role": "assistant", "content": "🚫 Hittade inget relevant."})
|
|
|
|
| 97 |
chunk_info = "\n\n".join([f"{i+1}. ({d.metadata['source']}) {d.page_content[:160]}…" for i, d in enumerate(docs)])
|
| 98 |
history.append({"role": "system", "content": f"🔎 Chunkar som används:\n{chunk_info}"})
|
| 99 |
|
| 100 |
+
# Bygg prompt med valt ctx_tok_max
|
| 101 |
+
def build_prompt_dynamic(query, docs, ctx_tok_max):
|
| 102 |
+
context_parts = []
|
| 103 |
+
total_ctx_tok = 0
|
| 104 |
+
for d in docs:
|
| 105 |
+
tok_len = len(tokenizer.encode(d.page_content))
|
| 106 |
+
if total_ctx_tok + tok_len > int(ctx_tok_max):
|
| 107 |
+
break
|
| 108 |
+
context_parts.append(d.page_content)
|
| 109 |
+
total_ctx_tok += tok_len
|
| 110 |
+
context = "\n\n---\n\n".join(context_parts)
|
| 111 |
+
return textwrap.dedent(f"""\
|
| 112 |
+
Du är en hjälpsam assistent som svarar på svenska.
|
| 113 |
+
Kontext (hämtat ur PDF‑dokument):
|
| 114 |
+
|
| 115 |
+
{context}
|
| 116 |
+
|
| 117 |
+
Fråga: {query}
|
| 118 |
+
Svar (svenska):""").strip()
|
| 119 |
+
|
| 120 |
+
prompt = build_prompt_dynamic(q, docs, ctx_tok_max)
|
| 121 |
+
log.info(f"Prompt tokens={len(tokenizer.encode(prompt))} temp={temp} max_new_tokens={max_new_tokens} k={k} ctx_tok_max={ctx_tok_max}")
|
| 122 |
|
| 123 |
try:
|
| 124 |
ans = gen_pipe(
|
| 125 |
prompt,
|
| 126 |
temperature=float(temp),
|
| 127 |
+
max_new_tokens=int(max_new_tokens),
|
| 128 |
pad_token_id=tokenizer.eos_token_id,
|
| 129 |
eos_token_id=tokenizer.eos_token_id,
|
| 130 |
do_sample=True,
|