File size: 6,935 Bytes
26fd6a5
 
 
 
 
 
 
 
 
 
 
 
 
 
9122576
26fd6a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90deb69
 
26fd6a5
ab627a5
 
9122576
faf9e56
9122576
 
 
 
26fd6a5
 
9122576
 
 
 
26fd6a5
 
9122576
 
 
26fd6a5
 
 
 
 
90deb69
26fd6a5
 
 
 
 
 
 
90deb69
26fd6a5
 
90deb69
26fd6a5
 
 
 
 
 
 
 
90deb69
26fd6a5
 
90deb69
26fd6a5
 
 
 
 
 
 
90deb69
26fd6a5
 
 
 
 
 
 
 
 
 
 
 
90deb69
26fd6a5
90deb69
 
 
 
26fd6a5
 
 
 
 
 
9122576
 
26fd6a5
 
 
 
 
 
 
 
 
5c612ca
9122576
 
5c612ca
9122576
5c612ca
9122576
5c612ca
 
 
 
 
0a4d210
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5c612ca
ab627a5
 
 
 
 
 
 
 
 
 
 
9122576
 
 
 
0a4d210
9122576
 
ab627a5
5c612ca
 
 
9122576
0a4d210
 
 
 
9122576
5c612ca
9122576
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# -*- 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)