Shreyas094 commited on
Commit
2ed0ca2
·
verified ·
1 Parent(s): 592c0c3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -8
app.py CHANGED
@@ -409,6 +409,36 @@ def get_context_for_query(query, selected_docs):
409
  else:
410
  return "No documents available to answer the query."
411
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
412
  def get_response_from_cloudflare(prompt, context, query, num_calls=3, temperature=0.2, search_type="pdf"):
413
  headers = {
414
  "Authorization": f"Bearer {API_TOKEN}",
@@ -420,15 +450,19 @@ def get_response_from_cloudflare(prompt, context, query, num_calls=3, temperatur
420
  instruction = f"""Using the following context from the PDF documents:
421
  {context}
422
  Write a detailed and complete response that answers the following user question: '{query}'"""
423
- else: # web search
424
  instruction = f"""Using the following context:
425
  {context}
426
  Write a detailed and complete research document that fulfills the following user request: '{query}'
427
  After writing the document, please provide a list of sources used in your response."""
 
 
 
 
428
 
429
  inputs = [
430
  {"role": "system", "content": instruction},
431
- {"role": "user", "content": query}
432
  ]
433
 
434
  payload = {
@@ -492,18 +526,17 @@ def get_response_with_search(query, model, num_calls=3, temperature=0.1):
492
  {context}
493
  Write a detailed and complete research document that fulfills the following user request: '{query}'
494
  After writing the document, please provide a list of sources used in your response.
495
- Importantly, only include information that is directly supported by the provided context. If you're unsure about any information, state that it couldn't be verified from the given context.
496
- After writing the document, please provide a list of sources used in your response."""
497
 
 
498
  if model == "@cf/meta/llama-3.1-8b-instruct":
499
  # Use Cloudflare API
500
  for response in get_response_from_cloudflare(prompt="", context=context, query=query, num_calls=num_calls, temperature=temperature, search_type="web"):
501
- yield response, "" # Yield streaming response without sources
502
  else:
503
  # Use Hugging Face API
504
  client = InferenceClient(model, token=huggingface_token)
505
 
506
- main_content = ""
507
  for i in range(num_calls):
508
  for message in client.chat_completion(
509
  messages=[{"role": "user", "content": prompt}],
@@ -513,8 +546,11 @@ After writing the document, please provide a list of sources used in your respon
513
  ):
514
  if message.choices and message.choices[0].delta and message.choices[0].delta.content:
515
  chunk = message.choices[0].delta.content
516
- main_content += chunk
517
- yield main_content, "" # Yield partial main content without sources
 
 
 
518
 
519
 
520
  INSTRUCTION_PROMPTS = {
 
409
  else:
410
  return "No documents available to answer the query."
411
 
412
+ def validate_response(initial_response, context, query, model, temperature=0.1):
413
+ validation_prompt = f"""Given the following context and initial response to the query "{query}":
414
+
415
+ Context:
416
+ {context}
417
+
418
+ Initial Response:
419
+ {initial_response}
420
+
421
+ Please validate the initial response against the provided context. Remove any hallucinations, irrelevant, or factually incorrect information. Generate a revised response that is accurate and directly supported by the context. If any information cannot be verified from the context, state that explicitly.
422
+
423
+ Revised Response:
424
+ """
425
+
426
+ if model == "@cf/meta/llama-3.1-8b-instruct":
427
+ return get_response_from_cloudflare(prompt=validation_prompt, context="", query="", num_calls=1, temperature=temperature, search_type="validation")
428
+ else:
429
+ client = InferenceClient(model, token=huggingface_token)
430
+ revised_response = ""
431
+ for message in client.chat_completion(
432
+ messages=[{"role": "user", "content": validation_prompt}],
433
+ max_tokens=10000,
434
+ temperature=temperature,
435
+ stream=True,
436
+ ):
437
+ if message.choices and message.choices[0].delta and message.choices[0].delta.content:
438
+ chunk = message.choices[0].delta.content
439
+ revised_response += chunk
440
+ yield revised_response
441
+
442
  def get_response_from_cloudflare(prompt, context, query, num_calls=3, temperature=0.2, search_type="pdf"):
443
  headers = {
444
  "Authorization": f"Bearer {API_TOKEN}",
 
450
  instruction = f"""Using the following context from the PDF documents:
451
  {context}
452
  Write a detailed and complete response that answers the following user question: '{query}'"""
453
+ elif search_type == "web":
454
  instruction = f"""Using the following context:
455
  {context}
456
  Write a detailed and complete research document that fulfills the following user request: '{query}'
457
  After writing the document, please provide a list of sources used in your response."""
458
+ elif search_type == "validation":
459
+ instruction = prompt # For validation, use the provided prompt directly
460
+ else:
461
+ raise ValueError("Invalid search_type")
462
 
463
  inputs = [
464
  {"role": "system", "content": instruction},
465
+ {"role": "user", "content": query if search_type != "validation" else ""}
466
  ]
467
 
468
  payload = {
 
526
  {context}
527
  Write a detailed and complete research document that fulfills the following user request: '{query}'
528
  After writing the document, please provide a list of sources used in your response.
529
+ Importantly, only include information that is directly supported by the provided context. If you're unsure about any information, state that it couldn't be verified from the given context."""
 
530
 
531
+ initial_response = ""
532
  if model == "@cf/meta/llama-3.1-8b-instruct":
533
  # Use Cloudflare API
534
  for response in get_response_from_cloudflare(prompt="", context=context, query=query, num_calls=num_calls, temperature=temperature, search_type="web"):
535
+ initial_response = response
536
  else:
537
  # Use Hugging Face API
538
  client = InferenceClient(model, token=huggingface_token)
539
 
 
540
  for i in range(num_calls):
541
  for message in client.chat_completion(
542
  messages=[{"role": "user", "content": prompt}],
 
546
  ):
547
  if message.choices and message.choices[0].delta and message.choices[0].delta.content:
548
  chunk = message.choices[0].delta.content
549
+ initial_response += chunk
550
+
551
+ # Validation step
552
+ for revised_response in validate_response(initial_response, context, query, model, temperature):
553
+ yield revised_response, "" # Yield streaming revised response without sources
554
 
555
 
556
  INSTRUCTION_PROMPTS = {