agents/live_api/app/agent.py (37 lines of code) (raw):
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os
import google
import vertexai
from google import genai
from google.genai.types import (
Content,
LiveConnectConfig,
)
from langchain_google_vertexai import VertexAIEmbeddings
from app.templates import FORMAT_DOCS, SYSTEM_INSTRUCTION
from app.vector_store import get_vector_store
# Constants
VERTEXAI = os.getenv("VERTEXAI", "true").lower() == "true"
LOCATION = "us-central1"
EMBEDDING_MODEL = "text-embedding-004"
MODEL_ID = "gemini-2.0-flash-exp"
URLS = [
"https://cloud.google.com/architecture/deploy-operate-generative-ai-applications"
]
# Initialize Google Cloud clients
credentials, project_id = google.auth.default()
vertexai.init(project=project_id, location=LOCATION)
if VERTEXAI:
genai_client = genai.Client(project=project_id, location=LOCATION, vertexai=True)
else:
# API key should be set using GOOGLE_API_KEY environment variable
genai_client = genai.Client(http_options={"api_version": "v1alpha"})
# Initialize vector store and retriever
embedding = VertexAIEmbeddings(model_name=EMBEDDING_MODEL)
vector_store = get_vector_store(embedding=embedding, urls=URLS)
retriever = vector_store.as_retriever()
def retrieve_docs(query: str) -> dict[str, str]:
"""
Retrieves pre-formatted documents about MLOps (Machine Learning Operations),
Gen AI lifecycle, and production deployment best practices.
Args:
query: Search query string related to MLOps, Gen AI, or production deployment.
Returns:
A set of relevant, pre-formatted documents.
"""
docs = retriever.invoke(query)
formatted_docs = FORMAT_DOCS.format(docs=docs)
return {"output": formatted_docs}
# Configure tools available to the agent and live connection
tool_functions = {"retrieve_docs": retrieve_docs}
live_connect_config = LiveConnectConfig(
response_modalities=["AUDIO"],
tools=[retrieve_docs],
system_instruction=Content(parts=[{"text": SYSTEM_INSTRUCTION}]),
)