S-Dreamer's picture
Update app.py
31d8051 verified
raw
history blame
2.03 kB
import os
from flask import Flask, request, jsonify
from dotenv import load_dotenv
from google.cloud import aiplatform
from google.protobuf import json_format
from google.protobuf.struct_pb2 import Value
from prompt import create_prompt
# Load environment variables from .env file
load_dotenv()
app = Flask(__name__)
# Configure Google Cloud credentials
PROJECT_ID = os.getenv("GCP_PROJECT_ID")
LOCATION = os.getenv("GCP_LOCATION")
@app.route("/api/chat", methods=["POST"])
def chat_handler():
"""
Handles chat requests by sending them to the Gemini model.
"""
# Get user query from the request body
data = request.get_json()
user_query = data.get("query")
if not user_query:
return jsonify({"error": "Query not provided"}), 400
# Create a prompt for the model
prompt = create_prompt(user_query)
# Initialize Vertex AI client
aiplatform.init(project=PROJECT_ID, location=LOCATION)
# Set up the prediction client
client_options = {"api_endpoint": f"{LOCATION}-aiplatform.googleapis.com"}
client = aiplatform.gapic.PredictionServiceClient(client_options=client_options)
# Define the model endpoint
endpoint = f"projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/gemini-1.0-pro-vision-001"
# Create the instance payload
instance = {"prompt": prompt}
instances = [json_format.ParseDict(instance, Value())]
# Set model parameters
parameters = {
"temperature": 0.2,
"maxOutputTokens": 256,
"topP": 0.8,
"topK": 40,
}
try:
# Send the request to the model
response = client.predict(
endpoint=endpoint, instances=instances, parameters=parameters
)
# Extract the model's response
model_response = response.predictions[0]
return jsonify({"response": model_response})
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == "__main__":
app.run(debug=True, port=5000)