tomas.helmfridsson commited on
Commit
3ebf529
·
1 Parent(s): 849e3ea

adjust inputs

Browse files
Files changed (1) hide show
  1. app.py +26 -6
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 = build_prompt(q, docs)
99
- history.append({"role": "system", "content": f"📝 Prompt till LLM:\n{prompt[:500]}{'...' if len(prompt)>500 else ''}"}) # Visa första 500 tecken
100
-
101
- log.info(f"Prompt tokens={len(tokenizer.encode(prompt))} temp={temp}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
 
103
  try:
104
  ans = gen_pipe(
105
  prompt,
106
  temperature=float(temp),
107
- max_new_tokens=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,