Skip to content

Commit f5ff2a3

Browse files
authored
Merge pull request #24 from harmony-one/luma-video
Luma video
2 parents d174d6e + fe7c50a commit f5ff2a3

File tree

9 files changed

+78
-40
lines changed

9 files changed

+78
-40
lines changed

apis/anthropic/anthropic_resource.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import anthropic
77
import json
88
import os
9+
from services import telegram_report_error
910
from .anthropic_helper import anthropicHelper as helper
1011
from app_types import ToolsBetaMessage
1112
from res import EngMsg as msg, CustomError
@@ -121,6 +122,7 @@ def post(self):
121122
error_json = json.loads(e.response.text)
122123
error_message = error_json["error"]["message"]
123124
app.logger.error(f"Unexpected Error: ({error_code}) {error_message}")
125+
telegram_report_error("anthropic", "NO_CHAT_ID", error_code, error_message)
124126
raise CustomError(error_code, error_message)
125127
except Exception as e:
126128
app.logger.error(f"Unexpected Error: {str(e)}")
@@ -157,6 +159,7 @@ def post(self):
157159
error_json = json.loads(e.response.text)
158160
error_message = error_json["error"]["message"]
159161
app.logger.error(f"Unexpected Error: ({error_code}) {error_message}")
162+
telegram_report_error("anthropic", "NO_CHAT_ID", error_code, error_message)
160163
raise CustomError(error_code, error_message)
161164
except Exception as e:
162165
app.logger.error(f"Ucnexpected Error: {str(e)}")
@@ -255,6 +258,7 @@ def __tool_request_handler(self, data, tool_execution_id, context):
255258
error_json = json.loads(e.response.text)
256259
error_message = error_json["error"]["message"]
257260
app.logger.error(f"Unexpected Error: ({error_code}) {error_message}")
261+
telegram_report_error("anthropic", "NO_CHAT_ID", error_code, error_message)
258262
raise CustomError(error_code, error_message)
259263
except Exception as e:
260264
context.push()
@@ -342,6 +346,7 @@ def post(self):
342346
error_json = json.loads(e.response.text)
343347
error_message = error_json["error"]["message"]
344348
app.logger.error(f"Unexpected Error: ({error_code}) {error_message}")
349+
telegram_report_error("anthropic", "NO_CHAT_ID", error_code, error_message)
345350
raise CustomError(error_code, error_message)
346351
except Exception as e:
347352
app.logger.error(f"Unexpected Error: {str(e)}")
@@ -434,11 +439,12 @@ def post(self):
434439
else:
435440
raise CustomError(400, "Bad request")
436441
except anthropic.AnthropicError as e:
437-
error_code = e.status_code
438-
error_json = json.loads(e.response.text)
439-
error_message = error_json["error"]["message"]
440-
app.logger.error(f"Unexpected Error: ({error_code}) {error_message}")
441-
raise CustomError(error_code, error_message)
442+
error_code = e.status_code
443+
error_json = json.loads(e.response.text)
444+
error_message = error_json["error"]["message"]
445+
app.logger.error(f"Unexpected Error: ({error_code}) {error_message}")
446+
telegram_report_error("anthropic", "NO_CHAT_ID", error_code, error_message)
447+
raise CustomError(error_code, error_message)
442448
except Exception as e:
443449
app.logger.error(f"Unexpected Error: {str(e)}")
444450
raise CustomError(500, "An unexpected error occurred.")

apis/llms_resource.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from flask import request, jsonify, Response, make_response, current_app as app
2+
23
from .vertex_resource import VertexGeminiCompletionRes
34
from .anthropic import AnthropicCompletionRes
45
from flask_restx import Namespace, Resource

apis/luma/luma_helper.py

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from config import config
88
from . import luna_client
99
import json
10+
from services import send_telegram_error_message
1011

1112
def send_telegram_message_with_download_button(chat_id, text, generation_id):
1213
try:
@@ -57,19 +58,6 @@ def count_generation_in_progress(generation_list):
5758
def get_queue_time(in_progress_count):
5859
return in_progress_count * 45 # 45 secs per video
5960

60-
def send_telegram_error_message(chat_id, error_text):
61-
bot_token = config.TELEGRAM_API_KEY
62-
base_url = f"https://api.telegram.org/bot{bot_token}/"
63-
64-
params = {
65-
"chat_id": chat_id,
66-
"text": error_text
67-
}
68-
69-
response = requests.post(base_url + "sendMessage", json=params)
70-
return response.json()
71-
72-
7361
def process_generation(prompt, generation_id, chat_id):
7462
try:
7563
completed = False

apis/luma/luma_resource.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from .luma_helper import count_generation_in_progress, count_generation_states, get_queue_time, process_generation, LumaErrorHandler
66
from res import EngMsg as msg, CustomError
77
from config import config
8+
from services import telegram_report_error
89
import concurrent.futures
910
import lumaai
1011

@@ -16,6 +17,7 @@ class Generation:
1617
def __init__(self, id):
1718
self.id = id
1819

20+
1921
@api.route('/generations')
2022
class LumaAiGenerationRes(Resource):
2123

@@ -44,6 +46,7 @@ def post(self):
4446
except lumaai.APIError as e:
4547
status_code, error_detail = LumaErrorHandler.get_error_info(e)
4648
LumaErrorHandler.log_error(app.logger, e)
49+
telegram_report_error("luma", chat_id, status_code, error_detail)
4750
raise CustomError(status_code, error_detail)
4851

4952
except Exception as e:
@@ -63,7 +66,7 @@ def get(self):
6366
return make_response(jsonify(generations), 200)
6467

6568

66-
@api.route('/generation/<generation_id>')
69+
@api.route('/generations/<generation_id>')
6770
class GenerationRes(Resource):
6871

6972
@api.doc(params={"generation_id": msg.API_DOC_PARAMS_COLLECTION_NAME})
@@ -73,7 +76,7 @@ def delete(self, generation_id):
7376
"""
7477
try:
7578
if (generation_id):
76-
luna_client.generations.delete(generation_id)
79+
luna_client.generations.delete(id=generation_id)
7780
return 'OK', 204
7881
else:
7982
return "Bad request, parameters missing", 400

apis/openai_resource.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
from flask_restx import Namespace, Resource
33
from werkzeug.utils import secure_filename
44
from openai.error import OpenAIError
5+
from res import EngMsg as msg, CustomError
56
import openai
67
import os
7-
from res import EngMsg as msg, CustomError
8+
9+
from services import telegram_report_error
810

911
api = Namespace('openai', description=msg.API_NAMESPACE_OPENAI_DESCRIPTION)
1012

@@ -58,6 +60,7 @@ def post(self):
5860
# Handle OpenAI API errors
5961
error_message = str(e)
6062
app.logger.error(f"OpenAI API Error: {error_message}")
63+
telegram_report_error("openai", "NO_CHAT_ID", e.code, error_message)
6164
raise CustomError(500, error_message)
6265
except Exception as e:
6366
# Handle other unexpected errors

apis/vertex_resource.py

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,20 @@
33
from vertexai.language_models import ChatModel, ChatMessage
44
from vertexai.preview.generative_models import GenerativeModel, Content, Part
55
import google.generativeai as genai
6+
from google.cloud import aiplatform
67
from google.generativeai.types import content_types
78
from google.oauth2 import service_account
89
import google.cloud.aiplatform as aiplatform
10+
from google.api_core.exceptions import GoogleAPICallError, ClientError
11+
from vertexai.generative_models import ResponseValidationError
12+
from services import telegram_report_error
913

1014
# from litellm import litellm
1115
import openai
1216
import vertexai
1317
import json
1418

19+
1520
from res import EngMsg as msg, CustomError
1621

1722
with open(
@@ -102,11 +107,15 @@ def post(self):
102107

103108
# return f"{response}", 200 # non streaming responses
104109
return make_response(jsonify(response), 200)
105-
except openai.error.OpenAIError as e:
106-
# Handle OpenAI API errors
107-
error_message = str(e)
108-
app.logger.error(f"OpenAI API Error: {error_message}")
109-
raise CustomError(500, error_message)
110+
except ResponseValidationError as e:
111+
telegram_report_error("vertex", "NO_CHAT_ID", "NO_CODE", str(e))
112+
raise CustomError(e.code, e.message)
113+
except GoogleAPICallError as e:
114+
telegram_report_error("vertex", "NO_CHAT_ID", e.code, e.message)
115+
raise CustomError(e.code, e.message)
116+
except ClientError as e:
117+
telegram_report_error("vertex", "NO_CHAT_ID", e.code, e.message)
118+
raise CustomError(e.code, e.message)
110119
except Exception as e:
111120
# Handle other unexpected errors
112121
error_message = str(e)
@@ -127,14 +136,16 @@ def post(self):
127136
if data.get('stream') == "True":
128137
data['stream'] = True # convert to boolean
129138
model = data.get('model')
139+
system_instruction = data.get('system')
140+
max_output_tokens = data.get('max_tokens')
141+
generation_config = genai.GenerationConfig(
142+
max_output_tokens=int(max_output_tokens),
143+
temperature=0.1,
144+
top_p= 1.0,
145+
top_k= 40,
146+
)
130147
app.logger.info(f'handling gemini request using {model}')
131-
chat_model = genai.GenerativeModel(model)
132-
parameters = {
133-
"max_output_tokens": 800,
134-
"temperature": 0.1,
135-
"top_p": 1.0,
136-
"top_k": 40,
137-
}
148+
chat_model = genai.GenerativeModel(model, system_instruction=system_instruction)
138149
if all(
139150
isinstance(m, dict) and
140151
set(m.keys()) == {"parts", "role"} and
@@ -163,15 +174,19 @@ def post(self):
163174
print("Skipping item - Invalid format:", item)
164175
inputTokens = chat_model.count_tokens(history)
165176
if data['stream'] == True: # use generate_responses to stream responses
166-
response = chat_model.generate_content(history, stream=True)
177+
response = chat_model.generate_content(history, generation_config=generation_config, stream=True)
167178
return Response(data_generator(response, inputTokens.total_tokens, chat_model), mimetype='text/event-stream')
168179

169180
return make_response(jsonify(response), 200)
170-
except openai.error.OpenAIError as e:
171-
# Handle OpenAI API errors
172-
error_message = str(e)
173-
app.logger.error(f"OpenAI API Error: {error_message}")
174-
raise CustomError(500, error_message)
181+
except ResponseValidationError as e:
182+
telegram_report_error("vertex", "NO_CHAT_ID", "NO_CODE", str(e))
183+
raise CustomError(e.code, e.message)
184+
except GoogleAPICallError as e:
185+
telegram_report_error("vertex", "NO_CHAT_ID", e.code, e.message)
186+
raise CustomError(e.code, e.message)
187+
except ClientError as e:
188+
telegram_report_error("vertex", "NO_CHAT_ID", e.code, e.message)
189+
raise CustomError(e.code, e.message)
175190
except Exception as e:
176191
# Handle other unexpected errors
177192
error_message = str(e)

config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ class Config(object):
2121
API_KEYS = os.environ.get("API_KEYS").split(',') if os.environ.get("API_KEYS") else []
2222
LUMAAI_API_KEY = os.environ.get("LUMAAI_API_KEY")
2323
TELEGRAM_API_KEY = os.environ.get('TELEGRAM_API_KEY')
24+
TELEGRAM_REPORT_ID = os.environ.get('TELEGRAM_REPORT_ID') # telegram user id
2425
config = Config()

services/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .telegram import BotHandler
1+
from .telegram import BotHandler, send_telegram_error_message, telegram_report_error
22
from .web_crawling import WebCrawling
33
from .pdf import PdfHandler
44
from .timer_decorator import timer

services/telegram.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,26 @@
1+
import requests
12
import telebot
23

4+
from config import config
5+
6+
def send_telegram_error_message(chat_id, error_text):
7+
bot_token = config.TELEGRAM_API_KEY
8+
base_url = f"https://api.telegram.org/bot{bot_token}/"
9+
10+
params = {
11+
"chat_id": chat_id,
12+
"text": error_text
13+
}
14+
15+
response = requests.post(base_url + "sendMessage", json=params)
16+
return response.json()
17+
18+
def telegram_report_error(resource_name, chat_id, status_code, error_detail):
19+
user_id = config.TELEGRAM_REPORT_ID
20+
if (user_id and resource_name and chat_id and status_code and error_detail):
21+
error_text = f"{resource_name} : Error reported in chat {chat_id} => ({status_code}) {error_detail}"
22+
send_telegram_error_message(user_id, error_text)
23+
324
class BotHandler:
425

526
def __init__(self, token):

0 commit comments

Comments
 (0)