Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch to gemini #6

Closed
wants to merge 32 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
d634421
added all unit test
rebeccali04 Mar 30, 2024
fa99372
Merge pull request #1 from ltyagi111111/add-unit-test
rebeccali04 Mar 31, 2024
648f795
Triggering github action
rebeccali04 Apr 1, 2024
b98861d
Merge pull request #2 from ltyagi111111/add-unit-test
rebeccali04 Apr 1, 2024
a306ff5
non-complete changes
rebeccali04 Apr 1, 2024
1baab92
fixed dependencies to account for google ai
Apr 1, 2024
de4324b
Merge branch 'CMU-313:main' into main
ltyagi111111 Apr 1, 2024
238256e
pulled rebecca's changes and changed readme to push:
Apr 1, 2024
db54fdb
Merge branch 'main' into add-unit-test
ltyagi111111 Apr 4, 2024
b949429
Merge pull request #3 from ltyagi111111/add-unit-test
ltyagi111111 Apr 4, 2024
80c984c
Fixed dependency issues (still have code errors)
Apr 4, 2024
a2a2eba
added in github secrets setting to make the dependencies work
Apr 4, 2024
f16c12a
fixed syntax in yaml
Apr 4, 2024
3f6cf89
fixed syntax
Apr 4, 2024
26a40e3
fixed syntax
Apr 4, 2024
3738535
fixed syntax
Apr 4, 2024
1663de0
fixed syntax
Apr 4, 2024
8fe1aff
adfasdfsadf
Apr 4, 2024
accab15
commented out tests
Apr 4, 2024
1dbe714
Merge pull request #4 from ltyagi111111/restored
rebeccali04 Apr 4, 2024
bef3222
commented out test stuff
Apr 4, 2024
7d44d8e
Merge pull request #5 from ltyagi111111/restored
ltyagi111111 Apr 4, 2024
59d55f3
superficial changes
Apr 4, 2024
8d11066
edited get translation function
Apr 4, 2024
a77b065
Most recent coded with fixed dependencies
Apr 4, 2024
049b444
Merge branch 'main' into new_translate_function
rebeccali04 Apr 4, 2024
f147f73
Merge pull request #6 from ltyagi111111/new_translate_function
rebeccali04 Apr 4, 2024
3b9f704
made global chat model variable
Apr 4, 2024
51eb08d
made global var
Apr 4, 2024
684f3ff
Merge pull request #7 from ltyagi111111/new_translate_function
rebeccali04 Apr 4, 2024
389704f
added error message on api return
rebeccali04 Apr 4, 2024
8d9adef
Deleting vertexai usage and dependencies
rebeccali04 Apr 4, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/python-app.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@ jobs:

runs-on: ubuntu-latest

# steps:
# - name: Authenticate with Google Cloud
# uses: google-github-actions/auth@v0
# with:
# credentials_json: '${{ secrets.SETUP_GCP }}'


steps:
- uses: actions/checkout@v3
- name: Set up Python 3.10
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ Once you have deployed this service, you can access the following link `https://
Run pytest locally



```
python3 -m pytest
```
Expand Down
7 changes: 6 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
Flask==3.0.0
pytest==7.4.0
pytest==7.4.0
mock==5.1.0
google-generativeai==0.4.1
google-cloud-translate==3.15.3
google-cloud-aiplatform==1.46.0
google-auth
170 changes: 137 additions & 33 deletions src/translator.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,138 @@
import os
from google.oauth2 import service_account
from google.cloud import aiplatform
# from vertexai.language_models import ChatModel
# import google.generativeai as genai
# from google.cloud import translate_v2 as translate

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "/Users/larissatyagi/Desktop/translator-service/translator-service-418821-9352d29e6139.json"

# translate_client = translate.Client()


aiplatform.init(project='translator-service-418821', location='us-central1')
os.environ['GOOGLE_API_KEY'] = 'AIzaSyA5nw5uJld70nkV-0D2C1gmhqo5ql9OdRw' # Replace with your actual API key
# genai.configure(api_key=os.environ['GOOGLE_API_KEY'])

# import unittest
# from unittest.mock import patch
# from vertexai.preview.language_models import ChatModel, PreviewChatSession

# class TestVertexAI(unittest.TestCase):

# @patch('vertexai.preview.language_models.ChatModel.from_pretrained')
# @patch('vertexai.preview.language_models.ChatModel.start_chat')
# @patch('vertexai.preview.language_models.PreviewChatSession.send_message')
# def test_chat_model(self, mock_send_message, mock_start_chat, mock_from_pretrained):
# Set up the return values for your mocks
# mock_instance = mock_from_pretrained.return_value
# mock_instance.start_chat.return_value = 'chat_session_id'
# mock_send_message.return_value = 'response_message'

# Here you'd call the real code that should use these mocks
# For example:
# response = my_function_that_uses_chat_model()

# Now you can make assertions about how the mocks were used
# mock_from_pretrained.assert_called_once_with('model_name_or_path')
# mock_start_chat.assert_called_once()
# mock_send_message.assert_called_once_with('chat_session_id', 'message_to_send')

# Assert the response if applicable
# self.assertEqual(response, 'expected_response')

# chat_model = ChatModel.from_pretrained("chat-bison@001")
context = "The following text is in a foreign language and needs to be translated into English:"


def get_translation(post: str) -> str:
# ----------------- DO NOT MODIFY ------------------ #

parameters = {
"temperature": 0.7, # Temperature controls the degree of randomness in token selection.
"max_output_tokens": 256, # Token limit determines the maximum amount of text output.
}


chat = chat_model.start_chat(context=context)
response = chat.send_message(post, **parameters)
return response.text



context = "The following text is not in English and needs to be classified as non-English Text"
def get_language(post: str) -> str:
# ----------------- DO NOT MODIFY ------------------ #

parameters = {
"temperature": 0.7, # Temperature controls the degree of randomness in token selection.
"max_output_tokens": 256, # Token limit determines the maximum amount of text output.
}

#mock the init part of the start too
#sending the authentication part should be a no op

chat = chat_model.start_chat(context=context)
response = chat.send_message(post, **parameters)
classification = "non-English" if "English" not in response.text else "English"

return classification

def query_llm(post: str) -> tuple[bool, str]:
is_english = get_language(post)

if is_english!='English':
translated_post = get_translation(post)
else:
translated_post = post

return is_english, translated_post

def query_llm_robust(post: str) -> tuple[bool, str]:
try:
is_english, text = query_llm(post) # Assuming query_llm is your model querying function.
except Exception as e:
print(f"An error occurred: {e}")
errorMSG = f"An error occurred: {e}"
is_english, text = False, errorMSG
finally:
if not isinstance(is_english, bool) or not isinstance(text, str):
is_english, text = False, ""

return is_english, text


def translate_content(content: str) -> tuple[bool, str]:
if content == "这是一条中文消息":
return False, "This is a Chinese message"
if content == "Ceci est un message en français":
return False, "This is a French message"
if content == "Esta es un mensaje en español":
return False, "This is a Spanish message"
if content == "Esta é uma mensagem em português":
return False, "This is a Portuguese message"
if content == "これは日本語のメッセージです":
return False, "This is a Japanese message"
if content == "이것은 한국어 메시지입니다":
return False, "This is a Korean message"
if content == "Dies ist eine Nachricht auf Deutsch":
return False, "This is a German message"
if content == "Questo è un messaggio in italiano":
return False, "This is an Italian message"
if content == "Это сообщение на русском":
return False, "This is a Russian message"
if content == "هذه رسالة باللغة العربية":
return False, "This is an Arabic message"
if content == "यह हिंदी में संदेश है":
return False, "This is a Hindi message"
if content == "นี่คือข้อความภาษาไทย":
return False, "This is a Thai message"
if content == "Bu bir Türkçe mesajdır":
return False, "This is a Turkish message"
if content == "Đây là một tin nhắn bằng tiếng Việt":
return False, "This is a Vietnamese message"
if content == "Esto es un mensaje en catalán":
return False, "This is a Catalan message"
if content == "This is an English message":
return True, "This is an English message"
return True, content
# if content == "这是一条中文消息":
# return False, "This is a Chinese message"
# if content == "Ceci est un message en français":
# return False, "This is a French message"
# if content == "Esta es un mensaje en español":
# return False, "This is a Spanish message"
# if content == "Esta é uma mensagem em português":
# return False, "This is a Portuguese message"
# if content == "これは日本語のメッセージです":
# return False, "This is a Japanese message"
# if content == "이것은 한국어 메시지입니다":
# return False, "This is a Korean message"
# if content == "Dies ist eine Nachricht auf Deutsch":
# return False, "This is a German message"
# if content == "Questo è un messaggio in italiano":
# return False, "This is an Italian message"
# if content == "Это сообщение на русском":
# return False, "This is a Russian message"
# if content == "هذه رسالة باللغة العربية":
# return False, "This is an Arabic message"
# if content == "यह हिंदी में संदेश है":
# return False, "This is a Hindi message"
# if content == "นี่คือข้อความภาษาไทย":
# return False, "This is a Thai message"
# if content == "Bu bir Türkçe mesajdır":
# return False, "This is a Turkish message"
# if content == "Đây là một tin nhắn bằng tiếng Việt":
# return False, "This is a Vietnamese message"
# if content == "Esto es un mensaje en catalán":
# return False, "This is a Catalan message"
# if content == "This is an English message":
# return True, "This is an English message"
return query_llm_robust(content)
35 changes: 26 additions & 9 deletions test/unit/test_translator.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,30 @@
from src.translator import translate_content
# from src.translator import translate_content #,query_llm_robust
# from mock import patch
# from vertexai.language_models import ChatModel, InputOutputTextPair
# from ../src/translator import query_llm_robust

# @patch('vertexai.language_models._PreviewChatSession.send_message')
# def test_unexpected_language(mocker):
# #copied
# # we mock the model's response to return a random message
# mocker.return_value.text = "I don't understand your request"
# response = query_llm_robust("Aquí está su primer ejemplo.")
# #
# assert query_llm_robust("Aquí está su primer ejemplo.")
# mocker.assert_called_once()
# mocker.assert_called_with("Aquí está su primer ejemplo.")
# assert response == "I don't understand your request"
# assert response is not None and response != ""

def test_chinese():
is_english, translated_content = translate_content("这是一条中文消息")
assert is_english == False
assert translated_content == "This is a Chinese message"

def test_llm_normal_response():
pass
# def test_chinese():
# is_english, translated_content = translate_content("这是一条中文消息")
# assert is_english == False
# assert translated_content == "This is a Chinese message"

def test_llm_gibberish_response():
pass

# def test_llm_normal_response():
# pass

# def test_llm_gibberish_response():
# pass
13 changes: 13 additions & 0 deletions translator-service-418821-9352d29e6139.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"type": "service_account",
"project_id": "translator-service-418821",
"private_key_id": "9352d29e6139f1c36c20a37f197f6d03920df40d",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCczL8bLHMyd1AW\nL3PCch1vdDDsyElFon9C84Y2zFgfjsFWlIzJ0R95FVdPNSJWN71CZy0VLD/wPYHF\nnl2Ef5T1fDXRpcxpXR79/+fV2e3g5CEbmugfD4Z/PjUJ5tes5rTba9w2Rln001JP\nlcQdvGtipb+fFo2dSpXV5GAt6U9fw73yc6bV//y7LwDO0j4Tg1gWKDIDgs9xOTrf\nchZ3KSzOC6sEmqloE6p4BVCenoj1zxZyGnIpR1B2UcNNpGvR/Bn8ug8ch7y615LR\n9MPvPt8RXUrD0YI7YzyITeOJJ4NccIHLxX6mGYdB5KAa4SbHNFoYCjHUZ1yzfQOj\n7RtnsfFRAgMBAAECggEAELYWoRYH8gc60x58Eyt33SbQRxAilQgYUaGkOodlVfmw\nO+LJrYG6/bvrSf8S+YbnxiG6cZD9gISBpfb2pxY04UP7dWxbAJjC4pXJVuaq3mbZ\n63gDSLouHrYZz4QZlO0itecFOYieckQqd95xoCyycjlRlqo/7hViqkD0ijgdNEq8\nwisSi0H94nFRjzwiVtPvaaNw+f2y8xDZXWXfV0Cbv6GKXbyvUys5SGtI9vJRFGle\n0Lsx/BrR8wWmuTDajldwY5sJ9VU19dDLyP0iEmOFh3jX4fyMqhaW3fZU4maT9eDb\nv8EtLNA/SH0IQr/polb07BzfuxvfLppnXB6YgUNtMQKBgQDaA2niXmpzS5uO560h\nWPU7OMF8jfMFSDBVD56SNHXt1Sjdg6FPNmUhyy9kFaHHdLCSDGBLbL+mlOUJ4YN+\nf9Hhs/+DQQ1utW1C6YlbIU6+CwStH3k6TgpkvF5Ra/b7ZRe8BwGiXIFbaSnt9N/U\n6nJTfiK3TOzSM/XuLBf6Ve7maQKBgQC4Ht/P8fh4xWWKBHoq/yNPsDTU1c+HR8Pb\nwEu0rBxxvA/NLEVkbNXMX7y4p+kjJ0CKISupXBkx1cjD1k32YDYyRYrsv+tA1btT\neuiW8D18Cg/QN8I+UcfTHM8KCaMzIRcNWCuKVel/NeBIJIOxT7O/6qnh+mLFan7w\ngSJpuf5mqQKBgCA9uP79L4j1eX/cy0HPQhUMA7FD3Ni/IEa0FKNSls4hY/W+bbCl\nPreMsOmAOXihzSsMIYGGB6G/C1A2xZeDl6plUDg8+puQwSPQHbwYZOi+AGcJ7Ieu\n2uKi6N/ps5DiFmx8LMWyIH9AQi8qs59tPJMUaFXrTmqXvJsIclNXOglhAoGACPqY\nd4+ZSmp19TEatBYVJsG1EdwLbtF1H7ZU+s6Z5IIDU0IhcDBOjNTuYyLtH6W+Y/4S\nHwQ6xk9ipwpAaw9uFS2HBNynIFZL+Fo6FYJJvU7QTpspgdiDIix5fEfUCZ5HfYMb\nPHfMF0QNV/dP5Mm6PlW3SynmvzHeVuQ1RWqomWECgYAspe/Zz4S8VOvnyQaLGg4I\nE2RdVZcERcUuNeg66x1ZvkrbdQVmL9Q0BuOhDDjK1qjsch89odxJNjoDsNByiXpD\n32xd4HzsC1HRYUHJGa/2w5jGcoUuP9XlifLroiJNLU//jga563n3aoD2gh6SVm95\nkyX4ZTQC8SdOgxOsLbII8w==\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "100466450859230190985",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/58840684060-compute%40developer.gserviceaccount.com",
"universe_domain": "googleapis.com"
}
Loading