import re import gradio as gr import time from typing import List, Dict # Mock backend responses class MockBackend: def generate_response(self, prompt: str, model: str) -> str: # Simulate some processing time time.sleep(1) # Mock responses for different types of queries if "binary search" in prompt.lower(): return """ def binary_search(arr: list, target: int) -> int: ''' Implements binary search algorithm Args: arr: Sorted list of numbers target: Number to find Returns: Index of target if found, -1 otherwise ''' left, right = 0, len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1 # Example usage: numbers = [1, 3, 5, 7, 9, 11, 13, 15] result = binary_search(numbers, 7) print(f"Found 7 at index: {result}") # Output: Found 7 at index: 3 """ elif "machine learning" in prompt.lower(): return "Machine Learning is a subset of artificial intelligence that enables systems to learn and improve from experience without being explicitly programmed. It uses statistical techniques to allow computers to 'learn' from data." else: return f"Mock response for query: {prompt}" # Initialize mock backend and query list mock_backend = MockBackend() queries_list = [] # Model name mappings llm_name2id = { "Llama-3.1-70B-Versatile": "llama-3.1-70b-versatile", "Llama-3-70B-8192": "llama3-70b-8192", "Llama-3-8B-8192": "llama3-8b-8192" } # Default values DEFAULT_TEMP = 0.2 DEFAULT_MODEL = "Llama-3-70B-8192" DEFAULT_USE_RAG = True def clear_queries(): global queries_list queries_list = [] return "", DEFAULT_MODEL, DEFAULT_TEMP, DEFAULT_USE_RAG, "", "" def add_to_list(query_txt: str, model: str, temperature: float, use_rag: bool) -> tuple: global queries_list if len(query_txt.strip()) > 0: queries_list.append({ "prompt": query_txt.strip(), "temperature": str(temperature), "model": llm_name2id[model], "use_rag": str(use_rag), }) return "", generate_queries_str(queries_list) def submit(query_txt: str, model: str, temperature: float, use_rag: bool) -> tuple: global queries_list if len(query_txt.strip()) > 0: _, queries = add_to_list(query_txt, model, temperature, use_rag) else: queries = generate_queries_str(queries_list) if len(queries_list) > 0: # Use mock backend instead of HTTP requests answers = [] for query in queries_list: response = mock_backend.generate_response(query["prompt"], query["model"]) answers.append({"answer": response}) answers_str = generate_answers_str(answers) queries_list = [] else: answers_str = "No queries submitted yet." return "", queries, answers_str def generate_queries_str(queries: List[Dict]) -> str: delimiter = f"\n{'-' * 120}\n" return delimiter.join([f"Query: {q['prompt']}" for q in queries]) def generate_answers_str(answers: List[Dict]) -> str: delimiter = f"\n{'-' * 120}\n" return delimiter.join([clean(a["answer"]) for a in answers]) def clean(answer_str: str) -> str: answer_str = re.sub('^\s*:', '', answer_str) garbages = [ "Here is the generated paragraph:", "Let me know if this meets your requirements!", ] for g in garbages: answer_str = answer_str.replace(g, "") return answer_str.strip() if __name__ == "__main__": with gr.Blocks(theme=gr.themes.Default()) as demo: gr.Markdown(""" # Multilingual LLM Interface (Mock Version) Enter your query in any language. This is a mock version for testing - responses are simulated. Test queries: 1. Ask about "binary search" to get a code implementation 2. Ask about "machine learning" to get an explanation 3. Try any other query to see mock responses """) with gr.Row(): with gr.Column(scale=2): query_txt = gr.Textbox( placeholder="Enter your query here...", label="Query", lines=3 ) with gr.Column(scale=1): model = gr.Radio( choices=[ "Llama-3-8B-8192", "Llama-3-70B-8192", "Llama-3.1-70B-Versatile", ], value=DEFAULT_MODEL, label="Select Model" ) use_rag = gr.Checkbox( value=DEFAULT_USE_RAG, label="Enable RAG (Retrieval-Augmented Generation)" ) temperature = gr.Slider( minimum=0, maximum=1, value=DEFAULT_TEMP, step=0.1, label="Temperature (Creativity)" ) with gr.Row(): clear_btn = gr.Button("Clear All", variant="stop") add_btn = gr.Button("Add Query", variant="secondary") submit_btn = gr.Button("Submit All", variant="primary") with gr.Row(): with gr.Column(): queries_box = gr.Textbox( placeholder="Your queries will appear here...", label="Submitted Queries", interactive=False, lines=5 ) with gr.Column(): answers_box = gr.Textbox( placeholder="Model responses will appear here...", label="Model Responses", interactive=False, lines=5 ) clear_btn.click( fn=clear_queries, inputs=[], outputs=[query_txt, model, temperature, use_rag, queries_box, answers_box] ) add_btn.click( fn=add_to_list, inputs=[query_txt, model, temperature, use_rag], outputs=[query_txt, queries_box] ) submit_btn.click( fn=submit, inputs=[query_txt, model, temperature, use_rag], outputs=[query_txt, queries_box, answers_box] ) demo.launch()