from django.http import JsonResponse from rest_framework.response import Response from rest_framework.views import APIView from mistralai import Mistral import os import requests from openai import OpenAI from ollama import Client from django.http import FileResponse import io class TTSView(APIView): def post(self, request, format=None): # Define the API endpoint # Define the URL for the TTS API url = 'http://localhost:5002/api/tts' # Define the multiline text text = "This is the first line" # Prepare the parameters for the GET request params = { 'text': text } # Make the GET request response = requests.get(url, params=params) # Check if the request was successful if response.status_code == 200: # Save the audio response as a WAV file # Create a file-like object with the audio data audio_data = io.BytesIO(response.content) # Return the audio file as a response return FileResponse(audio_data, as_attachment=True, filename='audio_output.wav') else: return Response({"error": "Failed to synthesize speech"}, status=response.status_code) class SpeechASRView(APIView): def post(self, request, format=None): try: data = request.data ##prompt = data['prompt'] audio = data['audio'] print('hre1') client = OpenAI(api_key="cant-be-empty", base_url="http://0.0.0.0:11800/v1/") print('her2') #filename= '/home/gaganyatri/Music/test1.flac' audio_bytes = audio.read() #audio_file = open(filename, "rb") transcript = client.audio.transcriptions.create( model="Systran/faster-distil-whisper-small.en", file=audio_bytes ) #print(transcript.text) voice_content = transcript.text return Response({"response": voice_content}) except Exception as e: print(f"An error occurred: {e}") return Response({'error': 'Something went wrong'}, status=500) class SpeechToSpeechView(APIView): def post(self, request, format=None): try: data = request.data ##prompt = data['prompt'] audio = data['audio'] client = OpenAI(api_key="cant-be-empty", base_url="http://0.0.0.0:11800/v1/") #filename= '/home/gaganyatri/Music/test1.flac' audio_bytes = audio.read() #audio_file = open(filename, "rb") transcript = client.audio.transcriptions.create( model="Systran/faster-distil-whisper-small.en", file=audio_bytes ) #print(transcript.text) voice_content = transcript.text #content = 'audio recieved' system_prompt = "Please summarize the following prompt into a concise and clear statement:" model = "mistral-nemo:latest" client = Client(host='http://localhost:11434') response = client.chat( model=model, messages=[ { "role": "system", "content": system_prompt }, { "role": "user", "content": voice_content, } ], ) # Extract the model's response about the image response_text = response['message']['content'].strip() url = 'http://localhost:5002/api/tts' # Define the multiline text #text = "This is the first line" # Prepare the parameters for the GET request params = { 'text': response_text } # Make the GET request response = requests.get(url, params=params) # Check if the request was successful if response.status_code == 200: # Save the audio response as a WAV file # Create a file-like object with the audio data audio_data = io.BytesIO(response.content) # Return the audio file as a response return FileResponse(audio_data, as_attachment=True, filename='audio_output.wav') else: return Response({"error": "Failed to synthesize speech"}, status=response.status_code) except Exception as e: print(f"An error occurred: {e}") return Response({'error': 'Something went wrong'}, status=500) class SpeechLLMView(APIView): def post(self, request, format=None): try: data = request.data ##prompt = data['prompt'] audio = data['audio'] client = OpenAI(api_key="cant-be-empty", base_url="http://localhost:11800/v1/") #filename= '/home/gaganyatri/Music/test1.flac' audio_bytes = audio.read() #audio_file = open(filename, "rb") transcript = client.audio.transcriptions.create( model="Systran/faster-distil-whisper-small.en", file=audio_bytes ) #print(transcript.text) voice_content = transcript.text #content = 'audio recieved' model = "mistral-nemo:latest" client = Client(host='http://localhost:11434') response = client.chat( model=model, messages=[{ "role": "user", "content": voice_content, }], ) # Extract the model's response about the image response_text = response['message']['content'].strip() return Response({"response": response_text}) except Exception as e: print(f"An error occurred: {e}") return Response({'error': 'Something went wrong'}, status=500) class TranslateLLMView(APIView): def post(self, request, format=None): try: data = request.data prompt = data['messages'][0]['prompt'] # Specify model source_language = data['sourceLanguage'] target_language = data['targetLanguage'] #model = data['model'] # Define the messages for the chat api_key=os.getenv("SARVAM_API_KEY", "") url = "https://api.sarvam.ai/translate" payload = { "input": prompt, "source_language_code": source_language, "target_language_code": target_language, "speaker_gender": "Male", "mode": "formal", "model": "mayura:v1", "enable_preprocessing": True } headers = {"Content-Type": "application/json", 'API-Subscription-Key': f"{api_key}" } response = requests.request("POST", url, json=payload, headers=headers) content = response.text #print(chat_response.choices[0].message.content) # Return the content of the response return Response({"response": content}) except Exception as e: print(f"An error occurred: {e}") return Response({'error': 'Something went wrong'}, status=500) class TextLLMView(APIView): def post(self, request, format=None): try: data = request.data isOnline = data['isOnline'] prompt = data['messages'][0]['prompt'] # Specify model #model = "pixtral-12b-2409" model = data['model'] # Define the messages for the chat messages = [ { "role": "user", "content": [ { "type": "text", "text": prompt } ] } ] if(isOnline): api_key = os.environ["MISTRAL_API_KEY"] # Initialize the Mistral client client = Mistral(api_key=api_key) # Get the chat response chat_response = client.chat.complete( model=model, messages=messages ) content = chat_response.choices[0].message.content else: content = "helloWorld" #print(chat_response.choices[0].message.content) # Return the content of the response return Response({"response": content}) except Exception as e: print(f"An error occurred: {e}") return Response({'error': 'Something went wrong'}, status=500) class IndicLLMView(APIView): def post(self, request, format=None): try: data = request.data isOnline = data['isOnline'] print(isOnline) prompt = data['messages'][0]['prompt'] # Specify model #model = "pixtral-12b-2409" model = data['model'] # Define the messages for the chat client = Client(host='http://localhost:11434') response = client.chat( model=model, messages=[{ "role": "user", "content": prompt, }], ) # Extract the model's response about the image response_text = response['message']['content'].strip() #print(chat_response.choices[0].message.content) # Return the content of the response return Response({"response": response_text}) except Exception as e: print(f"An error occurred: {e}") return Response({'error': 'Something went wrong'}, status=500) class LlamaVisionView(APIView): def post(self, request, format=None): try: data = request.data print("gere") image_data = (data['messages'][0]['image'][0]) prompt = data['messages'][0]['prompt'] # Specify model #model = "pixtral-12b-2409" model = data['model'] # Define the messages for the chat # Define the messages for the chat print("gere") client = Client(host='http://localhost:21434') response = client.chat( model="x/llama3.2-vision:latest", messages=[{ "role": "user", "content": prompt, "images": [image_data] }], ) print("gere") # Extract the model's response about the image response_text = response['message']['content'].strip() print(response_text) content = response_text print("gere") #print(chat_response.choices[0].message.content) # Return the content of the response return Response({"response": content}) except Exception as e: print(f"An error occurred: {e}") return Response({'error': 'Something went wrong'}, status=500) class VisionLLMView(APIView): def post(self, request, format=None): try: data = request.data api_key = os.environ["MISTRAL_API_KEY"] # Initialize the Mistral client client = Mistral(api_key=api_key) image_data = (data['messages'][0]['image'][0]) prompt = data['messages'][0]['prompt'] # Specify model #model = "pixtral-12b-2409" model = data['model'] # Define the messages for the chat messages = [ { "role": "user", "content": [ { "type": "text", "text": prompt }, { "type": "image_url", "image_url": f"data:image/jpeg;base64,{image_data}" } ] } ] # Get the chat response chat_response = client.chat.complete( model=model, messages=messages ) content = chat_response.choices[0].message.content #print(chat_response.choices[0].message.content) # Return the content of the response return Response({"response": content}) except Exception as e: print(f"An error occurred: {e}") return Response({'error': 'Something went wrong'}, status=500) class NIMVisionLLMView(APIView): def post(self, request, format=None): try: invoke_url = "https://ai.api.nvidia.com/v1/gr/meta/llama-3.2-11b-vision-instruct/chat/completions" stream = False api_key = os.environ["NIM_API_KEY"] data = request.data model = data['model'] print(model) image_data = (data['messages'][0]['image'][0]) prompt = data['messages'][0]['prompt'] headers = { "Authorization": f"Bearer {api_key}", "Accept": "text/event-stream" if stream else "application/json" } payload = { "model": model, "messages": [ { "role": "user", "content": f'{prompt} ' } ], "max_tokens": 512, "temperature": 1.00, "top_p": 1.00, "stream": stream } response = requests.post(invoke_url, headers=headers, json=payload) if stream: for line in response.iter_lines(): if line: #print(line.decode("utf-8")) data = line.decode("utf-8") #content = json.loads(data)['choices'][0]['delta'].get('content', '') else: #print(response.json()) data = response.json() content = data['choices'][0]['message']['content'] #print(content) return Response({"response": content}) except Exception as e: # Added general exception handling print(f"An error occurred: {e}") return Response({'error': 'Something went wrong'}, status=500)