diff --git a/.github/workflows/python-sample-app-s3-deploy.yml b/.github/workflows/python-sample-app-s3-deploy.yml index ef7124271..b1a2d297f 100644 --- a/.github/workflows/python-sample-app-s3-deploy.yml +++ b/.github/workflows/python-sample-app-s3-deploy.yml @@ -67,3 +67,11 @@ jobs: working-directory: lambda-layer/sample-apps run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./build/function.zip --key pyfunction.zip + - name: Build Gen AI Sample App Zip + working-directory: sample-apps/python/genai_service + run: zip -r python-gen-ai-sample-app.zip . + + - name: Upload Gen AI Sample App to S3 + working-directory: sample-apps/python/genai_service + run: aws s3api put-object --bucket ${{ secrets.APP_SIGNALS_E2E_EC2_JAR }}-prod-${{ matrix.aws-region }} --body ./python-gen-ai-sample-app.zip --key python-gen-ai-sample-app.zip + diff --git a/sample-apps/python/genai_service/server.py b/sample-apps/python/genai_service/server.py index 28572c7b7..1ef073e9e 100644 --- a/sample-apps/python/genai_service/server.py +++ b/sample-apps/python/genai_service/server.py @@ -6,11 +6,12 @@ from langchain_aws import ChatBedrock from langchain.prompts import ChatPromptTemplate from langchain.chains import LLMChain -from opentelemetry import trace +from opentelemetry import trace, metrics from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter from openinference.instrumentation.langchain import LangChainInstrumentor +import random # Load environment variables load_dotenv() @@ -92,7 +93,15 @@ async def chat(request: ChatRequest): """ Chat endpoint that processes a single user message through AWS Bedrock """ + try: + # Emit OTel Metrics + meter = metrics.get_meter("genesis-meter", "1.0.0") + request_duration = meter.create_histogram( + name="Genesis_TestMetrics", description="Genesis request duration", unit="s" + ) + request_duration.record(0.1 + (0.5 * random.random()), {"method": "GET", "status": "200"}) + # Process the input through the chain result = await chain.ainvoke({"input": request.message}) return ChatResponse(response=result["text"])