# -*- coding: utf-8 -*- """translation practice.ipynb Automatically generated by Colaboratory. Original file is located at https://colab.research.google.com/drive/1KrnodZGBZrUFdaJ9FIn8IhtWtCL7peoE """ import requests import gradio as gr from dotenv import load_dotenv import os from openai import OpenAI import spacy import random # Load environment variables from .env file load_dotenv() # Access the env HF_TOKEN = os.getenv('HUGGING_FACE_TOKEN') # openai setup client = OpenAI( api_key=os.getenv('OPENAI_API_KEY') ) # hugging face setup #model_name = "mmnga/ELYZA-japanese-Llama-2-7b-instruct-gguf" API_URL = f"https://api-inference.huggingface.co/models/" #API_URL = f"https://api-inference.huggingface.co/models/{model_name}" headers = {"Authorization": f"Bearer {HF_TOKEN}"} # Global variable to control debug printing DEBUG_MODE = True file_content = "Not yet loaded" try: file_path = "issun-boshi.txt" # Open the file in read mode ('r') with open(file_path, 'r') as file: # Read the entire content of the file into a string file_content = file.read() except Exception as e: print( "Error loading short story file.", str(e)) learning_content = file_content def debug_print(*args, **kwargs): if DEBUG_MODE: print(*args, **kwargs) def translate_openai(input_text): prompt = "Translate the following text into Japanese language: " + input_text response = client.chat.completions.create( # get translation from GPT messages=[ { "role": "user", "content": prompt, } ], model="gpt-3.5-turbo", temperature=0 # should be the same translation every time ) translation = response.choices[0].message.content debug_print("GPT translation:", translation) return translation def assess(original_japanese, student_translation): try: # get the English translation generated_translation = translate_hf(original_japanese) debug_print("Generated translation:", generated_translation) except Exception as e: return "Error in processing translation.", str(e) try: prompt = (f"Evaluate the student's English translation of Japanese for accuracy and naturalness. " f"Original: {original_japanese}, " f"Reference Translation: {generated_translation}, " f"Student Translation: {student_translation}. " "Highlight errors, suggest improvements, and note any nuances. Provide concise and very simple feedback for an English language learner aimed at improving their translation skills. Where possible, give concrete examples.") debug_print(prompt) # Evaluating the student's translation attempt response = client.chat.completions.create( messages=[ { "role": "user", "content": prompt, } ], model="gpt-3.5-turbo", ) debug_print("Full GPT response:", response) debug_print("Generated translation:", generated_translation) evaluation_feedback = response.choices[0].message.content return generated_translation, evaluation_feedback except Exception as e: return "Error in processing evaluation.", str(e) assessor = gr.Interface(fn=assess, inputs=[ gr.Textbox(label="Learning Content", placeholder="Enter content to focus on here", lines=4, value=learning_content),#example_Japanese),#" gr.Textbox(label="Student Data", placeholder="Enter student data here", lines=4, value="EFL Learner")#"This is an example") ], outputs=[ gr.Textbox(label="Machine Generated Translation"), gr.Textbox(label="Evaluation Feedback") ], title="Translation Practice", description="Enter a Japanese sentence and your English translation attempt to receive evaluation feedback." ) history_openai_format = [] def predict(message, history): debug_print("### History:", history_openai_format) for human, assistant in history: history_openai_format.append({"role": "user", "content": human }) history_openai_format.append({"role": "assistant", "content":assistant}) history_openai_format.append({"role": "user", "content": message}) try: response = client.chat.completions.create( model='gpt-3.5-turbo', messages=history_openai_format, temperature=0.7, #max_tokens=150, stream=True ) except Exception as e: debug_print("Error in getting LLM response.", str(e)) try: partial_message = "" for chunk in response: if chunk.choices[0].delta.content is not None: partial_message = partial_message + chunk.choices[0].delta.content yield partial_message except Exception as e: debug_print("Error in streaming output", str(e)) strategies = ''' - making connections between the text and their prior knowledge; - forming and testing hypotheses about texts; - asking questions about the text; - creating mental images or visualising; - inferring meaning from the text; - identifying the writer’s purpose and point of view; - identifying the main idea or theme in the text; - summarising the information or events in the text; - analysing and synthesising ideas, information, structures, and features in the text; - evaluating ideas and information''' with gr.Blocks() as demo: with gr.Row(): learner_data = gr.Textbox(label="Learner Data", placeholder="Enter learner data here...", lines=4, value="Honoka is a Japanese EFL student. [summary of relevant student data]") learning_content = gr.Textbox(label="Learning Content", placeholder="Enter learning content here...", lines=4, value=learning_content) teacher_prompt = gr.Textbox(label="Teacher Prompt", placeholder="Enter chat guidance here...", lines=4, value=f"You are a professional EFL teacher. Help the student actively read the text using these strategies: {strategies}. Use simple vocabulary and short sentences a beginner would understand. Guide the conversation to discuss the Learning Content below.") # pre prompt the history_openai_format list history_openai_format.append({"role": "system", "content": f"{teacher_prompt.value} Learner Data: {learner_data.value}. Learning Content: {learning_content.value}. "}) try: gr.ChatInterface(predict) except Exception as e: debug_print("Error in gr.ChatInterface(predict)", str(e)) demo.launch(debug=True)