১. ভূমিকা

এই কোডল্যাবে আপনি দেখবেন, সফটওয়্যার ডেভেলপমেন্ট লাইফ সাইকেল (SDLC)-এর ডিজাইন, বিল্ড ও টেস্ট এবং ডিপ্লয়ের মতো গুরুত্বপূর্ণ পর্যায়গুলোতে জেমিনি কোড অ্যাসিস্ট কীভাবে আপনাকে সহায়তা করতে পারে। আমরা একটি সম্পূর্ণ অ্যাপ্লিকেশন ডিজাইন ও ডেভেলপ করব এবং এটিকে গুগল ক্লাউডে ডিপ্লয় করব।
আমরা একটি টেকনিক্যাল ইভেন্টের সেশনগুলোর মধ্যে অনুসন্ধান করার জন্য একটি এপিআই এবং অ্যাপ্লিকেশন তৈরি করব। প্রতিটি সেশনের একটি শিরোনাম, সারাংশ, সময়কাল, বিভাগ এবং এক বা একাধিক বক্তা থাকবে।
আপনি যা করবেন
- শুরু থেকে একটি ওপেনএপিআই স্পেকের উপর ভিত্তি করে একটি ওয়েব অ্যাপ্লিকেশন ডিজাইন, বিল্ড, টেস্ট এবং ডিপ্লয় করুন।
আপনি যা শিখবেন
- জেমিনি কোড অ্যাসিস্ট ব্যবহার করে কীভাবে একটি ওপেনএপিআই স্পেসিফিকেশন তৈরি করা যায়
- OpenAPI স্পেসিফিকেশনের জন্য একটি পাইথন ফ্লাস্ক অ্যাপ্লিকেশন তৈরি করতে জেমিনি কোড অ্যাসিস্টের কোড জেনারেশন ফিচারগুলো কীভাবে ব্যবহার করবেন
- পাইথন ফ্লাস্ক অ্যাপ্লিকেশনের জন্য ওয়েব ফ্রন্ট-এন্ড তৈরি করতে জেমিনি কোড অ্যাসিস্ট কীভাবে ব্যবহার করবেন
- Google Cloud Run-এ অ্যাপ্লিকেশনটি ডেপ্লয় করার বিষয়ে সহায়তা পেতে Gemini Code Assist কীভাবে ব্যবহার করবেন
- অ্যাপ্লিকেশনটি বিল্ড এবং টেস্ট করার সময় জেমিনি কোড অ্যাসিস্টের কোড এক্সপ্লানেশন, টেস্ট কেস জেনারেশনের মতো ফিচারগুলো ব্যবহার করুন।
আপনার যা যা লাগবে
- ক্রোম ওয়েব ব্রাউজার
- একটি জিমেইল অ্যাকাউন্ট
- বিলিং সক্ষম একটি ক্লাউড প্রজেক্ট
- আপনার ক্লাউড প্রজেক্টের জন্য জেমিনি কোড অ্যাসিস্ট সক্রিয় করা হয়েছে।
এই ল্যাবটি নতুনদের সহ সকল স্তরের ডেভেলপারদের জন্য তৈরি করা হয়েছে। যদিও নমুনা অ্যাপ্লিকেশনটি পাইথন ভাষায় তৈরি, তবে কী ঘটছে তা বোঝার জন্য আপনার পাইথন প্রোগ্রামিং সম্পর্কে পরিচিতি থাকার প্রয়োজন নেই। আমাদের মূল লক্ষ্য থাকবে জেমিনি কোড অ্যাসিস্ট-এর সক্ষমতাগুলোর সাথে পরিচিত হওয়া।
২. জেমিনি কোড অ্যাসিস্ট সেটআপ করুন
এই ল্যাবটি শুরু করার জন্য আপনার যা যা করা প্রয়োজন, তার সবকিছু এই বিভাগে আলোচনা করা হয়েছে।
ক্লাউড শেল IDE-তে জেমিনি কোড অ্যাসিস্ট সক্রিয় করুন
কোডল্যাবের বাকি অংশের জন্য আমরা ক্লাউড শেল আইডিই (Cloud Shell IDE) ব্যবহার করব, যা একটি সম্পূর্ণভাবে পরিচালিত কোড ওএসএস (Code OSS) ভিত্তিক ডেভেলপমেন্ট এনভায়রনমেন্ট। আমাদের ক্লাউড শেল আইডিই-তে কোড অ্যাসিস্ট (Code Assist) সক্রিয় এবং কনফিগার করতে হবে এবং এর ধাপগুলো নিচে দেওয়া হলো:
- ide.cloud.google.com- এ যান। IDE-টি প্রদর্শিত হতে কিছুটা সময় লাগতে পারে, তাই অনুগ্রহ করে ধৈর্য ধরুন এবং সেটআপের ডিফল্ট পছন্দগুলো গ্রহণ করুন। যদি IDE সেটআপ করার জন্য কোনো নির্দেশাবলী দেখতে পান, তবে অনুগ্রহ করে ডিফল্ট সেটিংস ব্যবহার করে সেগুলো সম্পন্ন করুন।
- দেখানো অনুযায়ী নিচের স্ট্যাটাস বারে থাকা ‘ Cloud Code - Sign in’ বোতামটিতে ক্লিক করুন। নির্দেশনা অনুযায়ী প্লাগইনটি অনুমোদন করুন। যদি স্ট্যাটাস বারে "Cloud Code - no project" দেখতে পান, তবে সেটি নির্বাচন করুন এবং তারপরে প্রজেক্টের তালিকা থেকে নির্দিষ্ট গুগল ক্লাউড প্রজেক্টটি বেছে নিন, যেটিতে আপনি কাজ করতে চান।

- দেখানো অনুযায়ী নীচের ডান কোণায় থাকা কোড অ্যাসিস্ট (Code Assist) বোতামে ক্লিক করুন এবং শেষবারের মতো সঠিক গুগল ক্লাউড প্রজেক্টটি নির্বাচন করুন। যদি আপনাকে ক্লাউড এআই কম্প্যানিয়ন এপিআই (Cloud AI Companion API) সক্রিয় করতে বলা হয়, তবে তা করুন এবং সামনে এগিয়ে যান।
- আপনার গুগল ক্লাউড প্রজেক্টটি নির্বাচন করার পর, নিশ্চিত করুন যে আপনি স্ট্যাটাস বারের ক্লাউড কোড স্ট্যাটাস মেসেজে সেটি দেখতে পাচ্ছেন এবং নিচে দেখানো অনুযায়ী স্ট্যাটাস বারের ডানদিকে আপনার কোড অ্যাসিস্টও চালু আছে:

জেমিনি কোড অ্যাসিস্ট ব্যবহারের জন্য প্রস্তুত!
৩. ফায়ারস্টোর সেটআপ করুন
ক্লাউড ফায়ারস্টোর হলো একটি সম্পূর্ণভাবে পরিচালিত সার্ভারবিহীন ডকুমেন্ট ডেটাবেস, যা আমরা আমাদের অ্যাপ্লিকেশন ডেটার ব্যাকএন্ড হিসেবে ব্যবহার করব। ক্লাউড ফায়ারস্টোরের ডেটা ডকুমেন্টের কালেকশন আকারে বিন্যস্ত থাকে।
আমাদের ডিফল্ট ফায়ারস্টোর ডেটাবেসে ' sessions নামে একটি কালেকশন তৈরি করতে হবে। এই কালেকশনটিতে নমুনা ডেটা (ডকুমেন্ট) থাকবে, যা আমরা পরবর্তীতে আমাদের অ্যাপ্লিকেশনে ব্যবহার করব।
নিচে দেখানো অনুযায়ী আপনার ক্লাউড শেল IDE-র ভেতর থেকে প্রধান মেনুর মাধ্যমে টার্মিনালটি খুলুন:

আমাদের sessions নামে একটি কালেকশন তৈরি করতে হবে। এতে নমুনা সেশন ডকুমেন্টগুলোর একটি তালিকা থাকবে। প্রতিটি ডকুমেন্টের নিম্নলিখিত অ্যাট্রিবিউটগুলো থাকবে:
- শিরোনাম : স্ট্রিং
- বিভাগসমূহ : স্ট্রিং এর অ্যারে
- স্পিকার : স্ট্রিং এর অ্যারে
- সময়কাল : স্ট্রিং
- সারাংশ : স্ট্রিং
চলুন, নমুনা ডেটা সম্বলিত ফাইলটি আপনার নিজের প্রোজেক্টের একটি বাকেটে কপি করে এই কালেকশনটি পূরণ করি, যেখান থেকে আপনি পরবর্তীতে gcloud firestore import কমান্ডের মাধ্যমে কালেকশনটি ইম্পোর্ট করতে পারবেন।
ফায়ারস্টোর ডেটাবেস প্রারম্ভিককরণ
ক্লাউড কনসোলে ফায়ারস্টোর পৃষ্ঠাটি পরিদর্শন করুন।
যদি আপনি প্রজেক্টে আগে কোনো ফায়ারস্টোর ডাটাবেস ইনিশিয়ালাইজ না করে থাকেন, তাহলে default ডাটাবেসটি তৈরি করুন। ডাটাবেস তৈরির সময় নিম্নলিখিত মানগুলি ব্যবহার করুন:
- ফায়ারস্টোর মোড:
Native - অবস্থান: অবস্থানের ধরণ হিসেবে
Regionবেছে নিন এবং আপনার অ্যাপ্লিকেশনের জন্য উপযুক্ত অঞ্চলটি নির্বাচন করুন। এই অবস্থানটি লিখে রাখুন, কারণ পরবর্তী ধাপে বাকেটের অবস্থান জানার জন্য এটি আপনার প্রয়োজন হবে। - ডাটাবেসটি তৈরি করুন।

আমরা এখন নিচে দেওয়া ধাপগুলো অনুসরণ করে sessions কালেকশনটি তৈরি করব:
- নিচে দেওয়া
gsutilকমান্ড ব্যবহার করে আপনার প্রোজেক্টে একটি বাকেট তৈরি করুন। নিচের কমান্ডে থাকা<PROJECT_ID>ভেরিয়েবলটির জায়গায় আপনার Google Cloud প্রোজেক্ট আইডি বসান।<BUCKET_LOCATION>এর জায়গায় আপনার ডিফল্ট Firestore ডাটাবেসের ভৌগোলিক অঞ্চলের সাথে সামঞ্জস্যপূর্ণ একটি অঞ্চলের নাম বসান (যেমনটি আগের ধাপে উল্লেখ করা হয়েছে), এটি হতে পারে US-WEST1, EUROPE-WEST1, ASIA-EAST1 :
gsutil mb -l <BUCKET-LOCATION> gs://<PROJECT_ID>-my-bucket
- বাকেটটি তৈরি হয়ে গেলে, ফায়ারবেস ডাটাবেসে ইম্পোর্ট করার আগে, আমাদের প্রস্তুত করা ডাটাবেস এক্সপোর্টটি এই বাকেটে কপি করতে হবে। নিচে দেওয়া কমান্ডটি ব্যবহার করুন:
gsutil cp -r gs://sessions-master-database-bucket/2024-03-26T09:28:15_95256 gs://<PROJECT_ID>-my-bucket
এখন যেহেতু আমাদের কাছে ইম্পোর্ট করার জন্য ডেটা আছে, আমরা আমাদের তৈরি করা ফায়ারবেস ডেটাবেসে ( default ) ডেটা ইম্পোর্ট করার চূড়ান্ত ধাপে যেতে পারি।
- নিচে দেওয়া gcloud কমান্ডটি ব্যবহার করুন:
gcloud firestore import gs://<PROJECT_ID>-my-bucket/2024-03-26T09:28:15_95256
ইম্পোর্ট হতে কয়েক সেকেন্ড সময় লাগবে এবং এটি প্রস্তুত হয়ে গেলে, আপনি https://console.cloud.google.com/firestore/databases- এ গিয়ে আপনার ফায়ারস্টোর ডেটাবেস এবং কালেকশনটি যাচাই করতে পারবেন, এবং নিচে দেখানো অনুযায়ী default ডেটাবেস ও sessions কালেকশনটি নির্বাচন করুন:

এর মাধ্যমে আমাদের অ্যাপ্লিকেশনে ব্যবহৃত ফায়ারস্টোর কালেকশনটি তৈরি সম্পন্ন হলো।
৪. অ্যাপ্লিকেশন টেমপ্লেট তৈরি করুন
আমরা একটি নমুনা অ্যাপ্লিকেশন (একটি পাইথন ফ্লাস্ক অ্যাপ্লিকেশন) তৈরি করব যা আমরা কোডল্যাবের বাকি অংশে ব্যবহার করব। এই অ্যাপ্লিকেশনটি একটি প্রযুক্তিগত সম্মেলনে আয়োজিত সেশনগুলোর মধ্যে অনুসন্ধান করবে।
এই ধাপগুলো অনুসরণ করুন:
- নিচের স্ট্যাটাস বারে থাকা গুগল ক্লাউড প্রজেক্টের নামে ক্লিক করুন।

- বিকল্পগুলির একটি তালিকা প্রদর্শিত হবে। নিচের তালিকা থেকে নতুন অ্যাপ্লিকেশন (New Application) -এ ক্লিক করুন।

- ক্লাউড রান অ্যাপ্লিকেশনটি নির্বাচন করুন (এটি আমাদের অ্যাপের রানটাইম হবে)।
- Python (Flask): Cloud Run অ্যাপ্লিকেশন টেমপ্লেটটি নির্বাচন করুন।
- অ্যাপ্লিকেশনটির একটি নাম দিন এবং আপনার পছন্দের স্থানে সংরক্ষণ করুন।
- একটি নোটিফিকেশন নিশ্চিত করে যে আপনার অ্যাপ্লিকেশনটি তৈরি হয়েছে, এবং নিচে দেখানো ছবির মতো আপনার অ্যাপ্লিকেশনটি লোড হওয়া অবস্থায় একটি নতুন উইন্ডো খোলে। একটি
README.mdফাইল খুলে যায়। আপনি আপাতত ওই ভিউটি বন্ধ করতে পারেন।

৫. জেমিনি কোড অ্যাসিস্টের সাথে মিথস্ক্রিয়া
এই ল্যাবের জন্য, আমরা VS Code-এর Cloud Code এক্সটেনশনের অংশ হিসেবে Cloud Shell IDE-এর ভেতরে উপলব্ধ Gemini Code Assist Chat ব্যবহার করব। বাম দিকের নেভিগেশন বারে থাকা Code Assist বোতামে ক্লিক করে আপনি এটি চালু করতে পারেন। Code Assist আইকনটি খুঁজুন।
বাম দিকের নেভিগেশন টুলবারে থাকা অপশনটিতে ক্লিক করুন।
এর ফলে ক্লাউড শেল আইডিই-এর ভেতরে কোড অ্যাসিস্ট চ্যাট পেইনটি চালু হবে এবং আপনি কোড অ্যাসিস্টের সাথে চ্যাট করতে পারবেন।

উপরে থাকা ট্র্যাশ ক্যান আইকনটি লক্ষ্য করুন - এটি হলো কোড অ্যাসিস্ট চ্যাট হিস্টোরির কনটেক্সট রিসেট করার উপায়। আরও মনে রাখবেন যে, এই চ্যাট ইন্টারঅ্যাকশনটি IDE-তে আপনি যে ফাইল(গুলি) নিয়ে কাজ করছেন, তার উপর নির্ভরশীল।
৬. এপিআই ডিজাইন
আমাদের প্রথম পদক্ষেপ হবে ডিজাইন পর্যায়ে জেমিনি কোড অ্যাসিস্ট-এর সহায়তা নেওয়া। এই ধাপে, আমরা যে এনটিটিগুলোর (একটি ইভেন্টের টেকনিক্যাল সেশন) মধ্যে অনুসন্ধান করতে চাই, সেগুলোর জন্য একটি ওপেনএপিআই স্পেসিফিকেশন তৈরি করব।
নিম্নলিখিত নির্দেশটি দিন:
Generate an Open API spec that will allow me to retrieve all sessions, sessions by category, session by id. Each session has the following attributes: id, title, list of speakers, list of categories, summary and duration.
এটি বিভিন্ন কোয়েরি প্যারামিটারের মাধ্যমে সেশন জুড়ে অনুসন্ধানের জন্য একটি ওপেনএপিআই স্পেসিফিকেশন তৈরি করবে। স্পেসিফিকেশনটির নমুনা নিচে দেওয়া হলো:
openapi: 3.0.0
info:
title: Sessions API
description: This API allows you to retrieve all sessions, sessions by category, and session by id.
version: 1.0.0
servers:
- url: https://sessions.example.com
paths:
/sessions:
get:
summary: Get all sessions
operationId: getSessions
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Session'
/sessions/{id}:
get:
summary: Get session by id
operationId: getSessionById
parameters:
- name: id
in: path
required: true
description: The id of the session
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Session'
/sessions/categories/{category}:
get:
summary: Get sessions by category
operationId: getSessionsByCategory
parameters:
- name: category
in: path
required: true
description: The category of the sessions
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Session'
components:
schemas:
Session:
type: object
properties:
id:
type: string
description: The id of the session
title:
type: string
description: The title of the session
speakers:
type: array
items:
type: string
description: The list of speakers for the session
categories:
type: array
items:
type: string
description: The list of categories for the session
summary:
type: string
description: The summary of the session
duration:
type: string
description: The duration of the session
আপনি লক্ষ্য করতে পারেন যে স্পেসিফিকেশনটিতে নিম্নলিখিত বিষয়গুলো রয়েছে:
- সেশন টাইপের জন্য সংজ্ঞায়িত একটি স্কিমা।
- একাধিক API পাথ সংজ্ঞায়িত করা হয়েছে:
-
/sessions -
/sessions/{id} -
/sessions/categories/{category}
টপ ফোল্ডারে sessionsapi.yaml নামে একটি ফাইল তৈরি করুন এবং কোড অ্যাসিস্ট চ্যাট উইন্ডো থেকে "ইনসার্ট ইন কারেন্ট ফাইল অপশন" ( + বাটন) ব্যবহার করে কন্টেন্টটি কপি করে আনুন এবং ফাইলটি ক্লাউড শেল IDE-তে খোলা রাখুন।
এই পর্যায়ে, আপনি জেমিনি কোড অ্যাসিস্ট-এর একটি আকর্ষণীয় বৈশিষ্ট্য লক্ষ্য করতে পারেন: সাইটেশন । যখন জেনারেট করা কোড অন্য কোনো উৎস, যেমন বিদ্যমান ওপেন সোর্স কোড থেকে সরাসরি দীর্ঘ উদ্ধৃতি ব্যবহার করে, তখন এই তথ্যটি ডেভেলপারের সামনে তুলে ধরা হয়। এটি ডেভেলপারকে উৎস এবং লাইসেন্স প্রদান করে, যাতে তিনি সিদ্ধান্ত নিতে পারেন যে এটি নিয়ে কী করবেন।
তৈরি করা বিষয়বস্তু নিয়ে আমরা সন্তুষ্ট থাকলে, এখন আমরা এই স্পেসিফিকেশন ডকুমেন্টটি ব্যবহার করে এর জন্য একটি পাইথন ফ্লাস্ক অ্যাপ্লিকেশন তৈরি করতে পারি।
৭. অ্যাপ্লিকেশনটি তৈরি করুন
আমরা এখন কোড অ্যাসিস্টকে অ্যাপ্লিকেশনটি জেনারেট করতে বলব। sessionsapi.yaml ফাইলটি খোলা রেখে নিম্নলিখিত প্রম্পটটি দিন।
Generate a Python Application using the Flask framework, based on the sessionsapi.yaml file. This application uses a local in memory list of sessions. Do not use any Flask extensions.
এটি আপনাকে পাইথন ফ্লাস্ক অ্যাপ্লিকেশনের একটি কাঠামো প্রদান করবে, যা ওপেনএপিআই স্পেসিফিকেশন ফাইলে নির্দিষ্ট করা কার্যকারিতা এবং পাথগুলোর উপর ভিত্তি করে তৈরি।
প্রদত্ত পাইথন ফ্লাস্ক অ্যাপ্লিকেশন কোডটি নিম্নলিখিতটির অনুরূপ হওয়া উচিত:
from flask import Flask, jsonify, request
app = Flask(__name__)
sessions = [
{
"id": "1",
"title": "Session 1",
"speakers": ["Speaker 1", "Speaker 2"],
"categories": ["Category 1", "Category 2"],
"summary": "This is a summary of session 1.",
"duration": "1 hour",
},
{
"id": "2",
"title": "Session 2",
"speakers": ["Speaker 3", "Speaker 4"],
"categories": ["Category 3", "Category 4"],
"summary": "This is a summary of session 2.",
"duration": "1 hour 30 minutes",
},
]
@app.route('/sessions', methods=['GET'])
def get_sessions():
return jsonify(sessions)
@app.route('/sessions/<id>', methods=['GET'])
def get_session_by_id(id):
session = next((session for session in sessions if session['id'] == id), None)
if session is None:
return jsonify({}), 404
return jsonify(session)
@app.route('/sessions/categories/<category>', methods=['GET'])
def get_sessions_by_category(category):
sessions_by_category = [session for session in sessions if category in session['categories']]
return jsonify(sessions_by_category)
if __name__ == '__main__':
app.run()
পূর্ববর্তী ধাপের অংশ হিসেবে একটি app.py ফাইল তৈরি হয়েছে। Code Assist দ্বারা তৈরি কোডটি দিয়ে এর ভেতরের লেখাগুলো প্রতিস্থাপন করুন এবং ফাইলটি সেভ করুন।
আমরা app.run() লাইনটি পরিবর্তন করে পোর্ট ৮০৮০, হোস্ট অ্যাড্রেস 0.0.0.0 ব্যবহার করতে এবং লোকাল এক্সিকিউশনের সময় ডিবাগ মোডে চালাতে চাই। এটি করার একটি উপায় নিচে দেওয়া হলো। প্রথমে, চলুন এই লাইনটি হাইলাইট/সিলেক্ট করি:
app.run()
এরপর, কোড অ্যাসিস্ট চ্যাট ইন্টারফেসে এই প্রম্পটটি টাইপ করুন: Explain this.
এতে ওই নির্দিষ্ট লাইনটির একটি বিশদ ব্যাখ্যা দেখানো উচিত, যার একটি উদাহরণ নিচে দেওয়া হলো:

এখন, নিম্নলিখিত নির্দেশটি ব্যবহার করুন:
update the code to run the application on port 8080, host address 0.0.0.0, and in debug mode
তৈরি হওয়া প্রস্তাবিত কোডটি নিম্নরূপ হওয়া উচিত:
app.run(host='0.0.0.0', port=8080, debug=True)
এই কোডটুকু দিয়ে app.py ফাইলটি আপডেট করতে মনে রাখবেন।
অ্যাপ্লিকেশনটি স্থানীয়ভাবে চালান
আমরা যে বিষয়গুলো নিয়ে কাজ শুরু করেছিলাম, সেই অনুযায়ী অ্যাপ্লিকেশনটির প্রয়োজনীয়তাগুলো যাচাই করার জন্য চলুন এখন অ্যাপ্লিকেশনটি স্থানীয়ভাবে চালিয়ে দেখি।
প্রথম ধাপটি হলো requirements.txt ফাইলে থাকা পাইথন প্যাকেজ নির্ভরতাগুলো ইনস্টল করে একটি ভার্চুয়াল পাইথন এনভায়রনমেন্ট তৈরি করা। এটি করার জন্য, Cloud Shell IDE-এর Command Palette (Ctrl+Shift+P)-এ যান এবং Create Python environment টাইপ করুন। এরপর একটি Virtual Environment (venv) , Python 3.x ইন্টারপ্রেটার এবং requirements.txt ফাইলটি নির্বাচন করার জন্য পরবর্তী কয়েকটি ধাপ অনুসরণ করুন।
পরিবেশটি তৈরি হয়ে গেলে, একটি নতুন টার্মিনাল উইন্ডো খুলুন (Ctrl+Shift+`) এবং নিম্নলিখিত কমান্ডটি দিন:
python app.py
নীচে একটি নমুনা কার্যসম্পাদন দেখানো হলো:
(.venv) romin@cloudshell: $ python app.py
* Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:8080
* Running on http://10.88.0.3:8080
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 132-247-368
আপনি এখন নিম্নলিখিত URL-গুলিতে API-টি প্রিভিউ করতে পারেন। আমরা ধরে নিচ্ছি যে আপনার ডেভেলপমেন্ট সার্ভারটি ৮০৮০ পোর্টে চলছে। যদি তা না হয়, অনুগ্রহ করে এটিকে উপযুক্ত পোর্ট নম্বরে পরিবর্তন করুন।
-
https://<host-name>:8080/sessions -
https://<host-name>:8080/sessions/{id} -
https://<host-name>:8080/sessions/categories/{category}
এই URL-গুলো ব্যবহার করে app.py ফাইলে থাকা JSON ডেটা যাতে আপনি পেতে পারেন, তা নিশ্চিত করতে নিচে দেওয়া ধাপগুলো অনুসরণ করুন:
একটি নতুন টার্মিনাল উইন্ডো খুলুন এবং নিচের যেকোনো একটি কমান্ড ব্যবহার করে দেখুন:
curl -X GET http://127.0.0.1:8080/sessions
curl -X GET http://127.0.0.1:8080/sessions/<ID>
curl -X GET http://127.0.0.1:8080/sessions/categories/<CATEGORY_NAME>
৮. কোড রিফ্যাক্টরিং
app.py ফাইলে হার্ড-কোডেড স্যাম্পল JSON ডেটা রাখার পরিবর্তে, আমরা সম্ভবত এটিকে অন্য একটি মডিউলে আলাদা করতে চাইব, যাতে কোড এবং ডেটার মধ্যে একটি সুস্পষ্ট বিভাজন বজায় রাখা যায়। চলুন, সেটাই করা যাক!
app.py ফাইলটি খোলা রাখুন এবং নিম্নলিখিত প্রম্পটটি দিন:
Can I improve this code and separate out the sessions data from this app.py file?
কীভাবে তা করতে হবে, সে সম্পর্কে এটি আপনাকে কিছু ধারণা দেবে। আমরা যে নমুনা পরামর্শটি পেয়েছি এবং আপনিও যার অনুরূপ কিছু পাবেন, তা নিচে দেখানো হলো:

চলুন, কোড অ্যাসিস্টের পরামর্শ অনুযায়ী আমাদের ডেটাগুলো একটি sessions.py ফাইলে আলাদা করে নিই।
sessions.py নামে একটি নতুন ফাইল তৈরি করুন।
যার বিষয়বস্তু হলো JSON তালিকা, যা আমাদের তৈরি করা ডেটা অনুযায়ী নিচে দেওয়া হলো:
sessions = [
{
"id": "1",
"title": "Session 1",
"speakers": ["Speaker 1", "Speaker 2"],
"categories": ["Category 1", "Category 2"],
"summary": "This is a summary of session 1.",
"duration": "1 hour",
},
{
"id": "2",
"title": "Session 2",
"speakers": ["Speaker 3", "Speaker 4"],
"categories": ["Category 3", "Category 4"],
"summary": "This is a summary of session 2.",
"duration": "1 hour 30 minutes",
},
]
app.py ফাইলটি এখন অনেক সরল করা হয়েছে এবং নিচে তা দেখানো হলো:
from flask import Flask, jsonify, request
from sessions import sessions
app = Flask(__name__)
@app.route('/sessions', methods=['GET'])
def get_sessions():
return jsonify(sessions.sessions)
@app.route('/sessions/<id>', methods=['GET'])
def get_session_by_id(id):
session = next((session for session in sessions.sessions if session['id'] == id), None)
if session is None:
return jsonify({}), 404
return jsonify(session)
@app.route('/sessions/categories/<category>', methods=['GET'])
def get_sessions_by_category(category):
sessions_by_category = [session for session in sessions.sessions if category in session['categories']]
return jsonify(sessions_by_category)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
নিশ্চিত করুন যে এই রিফ্যাক্টর করা পরিবর্তনগুলির পরেও আপনি অ্যাপ্লিকেশনটি স্থানীয়ভাবে চালাতে এবং এপিআই পরীক্ষা করতে পারছেন। পাইথন ডেভেলপমেন্ট সার্ভারটি সম্ভবত এখনও চালু আছে, তাই আপনাকে শুধু আগের ধাপের curl কমান্ডগুলো পুনরায় কল করতে হবে।
৯. ফায়ারস্টোর কালেকশনের সাথে একীভূত করুন
পরবর্তী পদক্ষেপ হলো, আমাদের সেশনগুলোর জন্য থাকা লোকাল ইন-মেমরি JSON লিস্ট থেকে সরে এসে, আমাদের অ্যাপ্লিকেশনটিকে ফায়ারস্টোর ডাটাবেসের সেশনস কালেকশনের সাথে সংযুক্ত করা, যা আমরা এই কোডল্যাবের শুরুতে তৈরি করেছিলাম।
sessions.py ফাইলটি খোলা রাখুন এবং নিম্নলিখিত প্রম্পটটি দিন:
Can you further refactor the sessions.py code to read from a Firestore database that has a collection named sessions. The collection has the same attributes as the session object that we have defined. Use the Python module google-cloud-firestore.
ফায়ারস্টোর সংগ্রহ থেকে সমস্ত সেশন পড়ার জন্য আমরা নিম্নলিখিত পরামর্শটি পেয়েছি:
import google.cloud.firestore
# Create a Firestore client
db = google.cloud.firestore.Client()
# Get the sessions collection
sessions_collection = db.collection("sessions")
# Create a list of sessions
sessions = []
# Iterate over the documents and add them to the list
for doc in sessions_collection.stream():
session = doc.to_dict()
session["id"] = doc.id
sessions.append(session)
sessions.py ফাইলে কোডটি যুক্ত করে দিন।
আপনার লোকাল মেশিনে ফ্লাস্ক ডেভেলপমেন্ট সার্ভার চালু থাকলে, পাইথন মডিউলটি খুঁজে না পাওয়ার কারণে আপনার অ্যাপ্লিকেশনটি বন্ধ হয়ে যেতে পারে।
উদাহরণস্বরূপ, requirements.txt ফাইলে কোন পাইথন মডিউলটি যোগ করতে হবে, সে সম্পর্কে আপনি কোড অ্যাসিস্টকে নিম্নরূপভাবে জিজ্ঞাসা করতে পারেন:
Which Python package needs to be installed to make the firestore code work?
এটি আপনাকে পাইথন মডিউলের নামটি দেবে (যেমন google-cloud-firestore )। সেটি requirements.txt ফাইলে যোগ করুন।
আপনাকে নতুন যোগ করা মডিউল ( google-cloud-firestore ) সহ পাইথন এনভায়রনমেন্টটি পুনরায় তৈরি করতে হবে। তা করার জন্য, বর্তমান টার্মিনাল উইন্ডোতে নিম্নলিখিত কমান্ডটি দিন:
pip install -r requirements.txt
অ্যাপ্লিকেশনটি আবার চালান ( python app.py দিয়ে এটি পুনরায় চালু করুন) এবং /sessions URL-টিতে যান। এখন আপনি sessions কালেকশনে যোগ করা নমুনা ডকুমেন্টগুলো দেখতে পাবেন।

পূর্ববর্তী ধাপগুলিতে বর্ণিত পদ্ধতি অনুযায়ী, কোনো নির্দিষ্ট সেশন অথবা একটি প্রদত্ত ক্যাটাগরির সমস্ত সেশন পুনরুদ্ধার করতে নির্দ্বিধায় অন্যান্য URI ব্যবহার করতে পারেন।
১০. কোডের ব্যাখ্যা
কোডটি ভালোভাবে বোঝার জন্য জেমিনি কোড অ্যাসিস্ট-এর "Explain this" ফিচারটি ব্যবহার করার এটাই উপযুক্ত সময়। নির্দ্বিধায় যেকোনো ফাইলে প্রবেশ করুন অথবা কোডের নির্দিষ্ট অংশ নির্বাচন করে কোড অ্যাসিস্ট-কে নিম্নলিখিত প্রম্পটটি দিয়ে জিজ্ঞাসা করুন: Explain this ।
অনুশীলন হিসেবে, sessions.py ফাইলটি খুলুন এবং Firestore-এর নির্দিষ্ট কোড হাইলাইট করে তার ব্যাখ্যা জেনে নিন। শুধু পাইথন কোডেই নয়, আপনার প্রোজেক্টের অন্যান্য ফাইলেও এই ফিচারটি ব্যবহার করে দেখুন।
১১. ওয়েব অ্যাপ্লিকেশনটি তৈরি করুন
এখন যেহেতু আমরা এপিআই তৈরি করে একটি লাইভ ফায়ারস্টোর কালেকশনের সাথে ইন্টিগ্রেট করেছি, চলুন অ্যাপ্লিকেশনটির জন্য একটি ওয়েব-ভিত্তিক ফ্রন্ট-এন্ড তৈরি করি। আমাদের ওয়েব ফ্রন্ট-এন্ডের কার্যকারিতা আপাতত ন্যূনতম রাখা হবে, অর্থাৎ এটি শুধুমাত্র একটি নির্দিষ্ট ক্যাটাগরির সেশনগুলো সার্চ করতে পারবে। মনে রাখবেন যে এর জন্য আমাদের একটি এপিআই পাথ আছে, যেমন /sessions/categories/{category} তাই আমাদের ওয়েব অ্যাপ্লিকেশনটিকে সেটি কল করে ফলাফল সংগ্রহ করতে হবে।
চলুন সরাসরি শুরু করা যাক। কোড অ্যাসিস্টকে নিম্নলিখিত নির্দেশটি দিন:
Generate a web application that allows me to search for sessions by category and uses the Flask application that we created. Please use basic HTML, CSS and JS. Embed all the Javascript and CSS code into a single HTML file only.
এটি জাভাস্ক্রিপ্ট এবং সিএসএস এমবেড করা ওয়েব অ্যাপ্লিকেশনটির এইচটিএমএল (HTML) তৈরি করবে। এটি আপনাকে app.py ফাইলে একটি নতুন রুট যোগ করতেও বলবে, যাতে রুট বা বেস ইউআরএল-এ ভিজিট করা যেকোনো ব্যবহারকারীকে হোম পেজটি দেখানো হয়। যদি এতে সেই তথ্য উল্লেখ না থাকে, তবে এ বিষয়ে জিজ্ঞাসা করুন অথবা নিচে দেওয়া কোড স্নিপেটটি ব্যবহার করুন:
@app.route('/')
def index():
return render_template('index.html')
আপনি এটি index.html হিসেবে সেভ করতে পারেন, কিন্তু ফাইলটি কোথায় সেভ করা উচিত (অর্থাৎ কোন ফোল্ডারে?) সে বিষয়ে আপনার প্রশ্ন থাকতে পারে। এ ব্যাপারে আমরা কোড অ্যাসিস্ট-কে একটি ফলো-আপ প্রশ্ন করতে পারি।
Given that I am using the flask framework, where should I put the index.html file?
এটি আপনাকে পরিষ্কারভাবে জানিয়ে দেবে যে এটি render_template ফ্রেমওয়ার্ক ব্যবহার করে এবং সেই কারণে index.html ফাইলটি templates ফোল্ডারের ভিতরে রাখতে হবে। আপনি এই ফোল্ডারটি পেয়ে যাবেন, কারণ এই কোডল্যাবের শুরুতে আমরা Flask টেমপ্লেটের উপর ভিত্তি করে একটি অ্যাপ্লিকেশন তৈরি করেছিলাম। ফলে, সেখানে আগে থেকেই একটি index.html ফাইল রয়েছে এবং আপনাকে কেবল এর ভেতরের লেখাগুলো এখানে তৈরি হওয়া নতুন ফাইলটি দিয়ে প্রতিস্থাপন করতে হবে। Code Assist-এ আপনার app.py ফাইলে render_template ইম্পোর্ট করার কথাও উল্লেখ করা হয়েছে।
ওয়েব অ্যাপ্লিকেশন কোডটি index.html ফাইলে সেভ করুন এবং ফাইলটি templates ফোল্ডারে রাখতে ভুলবেন না।
অ্যাপ্লিকেশনটি স্থানীয়ভাবে চালান
আমরা যে বিষয়গুলো নিয়ে কাজ শুরু করেছিলাম, সেই অনুযায়ী অ্যাপ্লিকেশনটির প্রয়োজনীয়তাগুলো যাচাই করার জন্য চলুন এখন অ্যাপ্লিকেশনটি স্থানীয়ভাবে চালিয়ে দেখি।
নিশ্চিত করুন যে স্থানীয় ফ্লাস্ক সার্ভারটি এখনও চালু আছে এবং কোনো ত্রুটি দেখাচ্ছে না। ত্রুটি দেখা দিলে, সেগুলোর সমাধান করুন এবং সার্ভারটি চালু করুন।
একবার চালু হয়ে গেলে, অ্যাপ্লিকেশনটির হোম ইউআরএল-এ যান। সেখানে আপনাকে নিচে দেখানো ছবির মতো index.html ফাইলটি দেখানো হবে:

ইনপুট হিসেবে ডেটা থেকে যেকোনো একটি ক্যাটাগরি (যেমন AI ) দিন এবং Search বাটনে ক্লিক করুন। এতে AI ক্যাটাগরি দিয়ে ট্যাগ করা সেশনগুলো প্রদর্শিত হবে।

একটি ঐচ্ছিক অনুশীলন হলো প্রতিটি সেশনের জন্য সময়কাল, বিভাগ, বক্তা এবং সারাংশের মতো অতিরিক্ত মেটাডেটা প্রদর্শন করা।
১২. টেস্ট কেস তৈরি
আমরা সেশন এপিআই তৈরি করে ফেলেছি এবং এখন বিভিন্ন এপিআই পাথের জন্য ইউনিট টেস্ট কেস তৈরি করতে জেমিনি কোড অ্যাসিস্ট ব্যবহার করার সময় এসেছে।
app.py ফাইলটি খোলা রাখুন এবং নিম্নলিখিত প্রম্পটটি দিন:
Generate unit test cases for app routes. Use unittest module.
আমরা নিম্নলিখিত প্রতিক্রিয়া পেয়েছি:
import unittest
from app import app
class FlaskAppTestCase(unittest.TestCase):
def test_index(self):
tester = app.test_client()
response = tester.get('/')
self.assertEqual(response.status_code, 200)
def test_get_sessions(self):
tester = app.test_client()
response = tester.get('/sessions')
self.assertEqual(response.status_code, 200)
def test_get_session_by_id(self):
tester = app.test_client()
response = tester.get('/sessions/1')
self.assertEqual(response.status_code, 200)
def test_get_sessions_by_category(self):
tester = app.test_client()
response = tester.get('/sessions/categories/category1')
self.assertEqual(response.status_code, 200)
if __name__ == '__main__':
unittest.main()
উপরের কোডটি দিয়ে tests.py নামে একটি ফাইল তৈরি করুন।
টেস্ট কেস জেনারেশন সম্পর্কে একটি নোট
আপনি উপরেরটির চেয়ে ভিন্ন একটি কোড তালিকা দেখতে পারেন এবং এর ফলে টেস্ট কেসগুলো চালাতে কিছু সমস্যা হতে পারে। উদাহরণস্বরূপ, আমরা দেখেছি যে আমাদের কিছু রানে নিম্নলিখিত গুরুত্বপূর্ণ কোডের অংশগুলো বাদ পড়ে গিয়েছিল:
from app import app
বিদ্যমান ফ্লাস্ক অ্যাপটি ইম্পোর্ট করার জন্য উপরের কোডটি প্রয়োজন, যেটির উপর আমরা টেস্ট কেসগুলো প্রয়োগ করব।
if __name__ == '__main__':
`unittest.main()`
টেস্ট কেসগুলো চালানোর জন্য উপরের কোডটি প্রয়োজন।
আমাদের পরামর্শ হলো, প্রতিটি টেস্ট কেস খতিয়ে দেখুন এবং জেনারেটেড কোডে থাকা assertEqual ও অন্যান্য শর্তগুলো পরীক্ষা করে নিশ্চিত করুন যে এটি সঠিকভাবে কাজ করবে। যেহেতু ফায়ারস্টোর কালেকশনে ডেটা এক্সটার্নাল, তাই এটির অ্যাক্সেস নাও থাকতে পারে এবং কিছু ডামি ডেটা ব্যবহার করতে পারে, যার ফলে টেস্টগুলো ফেইল করতে পারে। তাই সেই অনুযায়ী আপনার টেস্ট কেসগুলো পরিবর্তন করুন অথবা যে টেস্ট কেসগুলো আপনার তাৎক্ষণিকভাবে প্রয়োজন নেই, সেগুলো কমেন্ট আউট করে দিন।
প্রদর্শনী হিসেবে, আমরা নিম্নলিখিত কমান্ড ব্যবহার করে টেস্ট কেসগুলো চালিয়েছি (অবশ্যই লোকাল ডেভেলপমেন্ট সার্ভারটি চালাবেন, কারণ কলগুলো লোকাল এপিআই এন্ডপয়েন্টগুলোতে করা হবে):
python tests.py
আমরা নিম্নলিখিত সারসংক্ষেপ ফলাফল পেয়েছি:
Ran 4 tests in 0.274s
FAILED (failures=2)
এটা আসলেই সঠিক, কারণ তৃতীয় পরীক্ষায় সেশন আইডিটি সঠিক ছিল না এবং category1 নামে কোনো ক্যাটাগরি নেই।
.
সুতরাং সেই অনুযায়ী টেস্ট কেসগুলো সাজিয়ে নিন এবং পরীক্ষা করে দেখুন।
১৩. পরীক্ষা-চালিত উন্নয়ন
চলুন এখন টেস্ট-ড্রাইভেন ডেভেলপমেন্ট (TDD) পদ্ধতি অনুসরণ করে আমাদের সেশনস এপিআই-তে একটি নতুন সার্চ মেথড যোগ করার বিষয়টি দেখি। এই পদ্ধতির মূলনীতি হলো, প্রথমে টেস্ট কেস লেখা, ইমপ্লিমেন্টেশনের অভাবে সেগুলোকে ফেইল করানো এবং এরপর জেমিনি কোড অ্যাসিস্ট ব্যবহার করে অনুপস্থিত ইমপ্লিমেন্টেশনটি তৈরি করা, যাতে টেস্টটি পাস করে।
tests.py ফাইলে যান (ধরে নিচ্ছি যে আপনি tests.py ফাইলটি এমনভাবে ঠিক করেছেন যাতে সমস্ত টেস্ট পাস করে)। কোড অ্যাসিস্টকে নিম্নলিখিত প্রম্পটটি জিজ্ঞাসা করুন:
Generate a new test case to search for sessions by speaker
এর ফলে আমরা নিম্নলিখিত টেস্ট কেস ইমপ্লিমেন্টেশনটি পাই, যা আমরা যথাযথভাবে tests.py ফাইলে যুক্ত করেছি।
def test_get_sessions_by_speaker(self):
tester = app.test_client()
response = tester.get('/sessions/speakers/speaker1')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json, [sessions.sessions[0], sessions.sessions[1]])
আপনি পরীক্ষাগুলো চালালে নিম্নলিখিত ত্রুটিটি দেখতে পাবেন:
$ python tests.py
.F.
======================================================================
FAIL: test_get_sessions_by_speaker (__main__.FlaskAppTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/romin/hello-world-5/tests.py", line 21, in test_get_sessions_by_speaker
self.assertEqual(response.status_code, 200)
AssertionError: 404 != 200
----------------------------------------------------------------------
Ran 3 tests in 0.010s
FAILED (failures=1)
এর কারণ হলো, টেস্ট কেসটি নিম্নলিখিত পাথটি ( /sessions/speakers/ ) ব্যবহার করেছে এবং app.py তে এর কোনো ইমপ্লিমেন্টেশন নেই।
চলুন কোড অ্যাসিস্টকে একটি ইমপ্লিমেন্টেশন দিতে বলি। app.py ফাইলে যান এবং কোড অ্যাসিস্টকে নিম্নলিখিত প্রম্পটটি দিন:
Add a new route to search for sessions by a specific speaker
কোড অ্যাসিস্টের পরামর্শে আমরা নিম্নলিখিত বাস্তবায়নটি পেয়েছি, যা আমরা app.py ফাইলে যুক্ত করেছি:
@app.route('/sessions/speakers/<speaker>', methods=['GET'])
def get_sessions_by_speaker(speaker):
sessions_by_speaker = [session for session in sessions.sessions if speaker in session['speakers']]
return jsonify(sessions_by_speaker)
tests.py ফাইলটি পুনরায় দেখুন এবং দ্রুত যাচাই করার জন্য আমরা আমাদের টেস্ট কেসটি নিম্নরূপভাবে পরিবর্তন করেছি:
def test_get_sessions_by_speaker(self):
tester = app.test_client()
response = tester.get('/sessions/speakers/Romin Irani')
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.json), 1)
টেস্টটি সঠিকভাবে চলেছে। আমরা এই কাজটি আপনার জন্য একটি অনুশীলন হিসেবে রেখে যাচ্ছি: তৈরি হওয়া টেস্ট কেসগুলো পর্যালোচনা করুন, আপনার ফায়ারস্টোরে থাকা ডেটার ওপর নির্ভর করে সেগুলোতে সামান্য পরিবর্তন আনুন এবং পাইথন ইউনিট টেস্ট কেসগুলোতে যথাযথ assert* মেথডগুলো যুক্ত করুন।
১৪. গুগল ক্লাউড রান-এ ডেপ্লয় করা
এখন যেহেতু আমরা আমাদের ডেভেলপমেন্টের মান নিয়ে সন্তুষ্ট, আমাদের চূড়ান্ত পদক্ষেপ হবে এই অ্যাপ্লিকেশনটি গুগল ক্লাউড রান-এ ডেপ্লয় করা। তবে, নিশ্চিত হওয়ার জন্য, আমরা কিছু ভুলে গেছি কিনা তা কোড অ্যাসিস্টকে জিজ্ঞাসা করা উচিত। app.py ফাইলটি খোলা রেখে, নিম্নলিখিত প্রম্পটটি সাবমিট করুন:
Is there something here I should change before I deploy to production?
ভালোই হলো যে আপনি জিজ্ঞেস করলেন, কারণ আমরা আসলে ডিবাগিং ফ্ল্যাগটি অফ করতে ভুলেই গিয়েছিলাম।

নির্দেশনা অনুযায়ী, ডিবাগিং বন্ধ করুন এবং gcloud কমান্ডের জন্য Gemini Code Assist-এর কাছে সাহায্য চান, যা ব্যবহার করে অ্যাপ্লিকেশনটি সরাসরি সোর্স থেকে (প্রথমে কন্টেইনার তৈরি না করেই) ক্লাউড রান-এ ডেপ্লয় করা যায়।
নিম্নলিখিত নির্দেশটি দিন:
I would like to deploy the application to Cloud Run directly from source. What is the gcloud command to do that?
উপরের নির্দেশটির কয়েকটি ভিন্নতা চেষ্টা করুন। আমরা আরেকটি যা চেষ্টা করেছিলাম তা হলো:
I would like to deploy this application to Cloud Run. I don't want to build a container image locally but deploy directly from source to Cloud Run. What is the gcloud command for that?
আদর্শগতভাবে আপনার নিম্নলিখিত gcloud কমান্ডটি পাওয়া উচিত:
gcloud run deploy sessions --source .
আপনি আরও পেতে পারেন:
gcloud run deploy <service-name> --source . \
—-platform managed \
—-allow-unauthenticated
অ্যাপ্লিকেশনটির রুট ফোল্ডার থেকে উপরের কমান্ডটি চালান। region জানতে চাইলে, us-central1 নির্বাচন করুন এবং unauthenticated invocations অনুমতি চাইলে, Y নির্বাচন করুন। আপনাকে আর্টিফ্যাক্ট রেজিস্ট্রি (Artifact Registry), ক্লাউড বিল্ড (Cloud Build) এবং ক্লাউড রান (Cloud Run)-এর মতো গুগল ক্লাউড এপিআই (Google Cloud APIs) সক্রিয় করতে এবং একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি (Artifact Registry repository) তৈরি করার অনুমতিও চাওয়া হতে পারে, অনুগ্রহ করে অনুমতিটি দিয়ে দিন।
স্থাপন প্রক্রিয়াটি সম্পন্ন হতে প্রায় ২ মিনিট সময় লাগবে, তাই অনুগ্রহ করে ধৈর্য ধরুন।
সফলভাবে ডেপ্লয় করা হয়ে গেলে, আপনি ক্লাউড রান সার্ভিস ইউআরএলটি দেখতে পাবেন। সেই পাবলিক ইউআরএলটিতে গেলে আপনি দেখবেন যে একই ওয়েব অ্যাপ্লিকেশনটি সফলভাবে ডেপ্লয় হয়ে চলছে।

অভিনন্দন, খুব ভালো করেছো!
১৫. (ঐচ্ছিক) ক্লাউড লগিং ব্যবহার করুন
আমরা আমাদের অ্যাপ্লিকেশনে এমনভাবে লগিং চালু করতে পারি, যাতে অ্যাপ্লিকেশন লগগুলো গুগল ক্লাউডের কোনো একটি সার্ভিসে (ক্লাউড লগিং) কেন্দ্রীভূত থাকে। এরপর আমরা লগ এন্ট্রিগুলো সম্পর্কে ধারণা পেতে অবজার্ভেবিলিটি জেমিনি ফিচারটিও ব্যবহার করতে পারি।
এটি করার জন্য, আমাদের প্রথমে গুগল ক্লাউডের একটি বিদ্যমান পাইথন ক্লাউড লগিং লাইব্রেরি ব্যবহার করতে হবে এবং সেটি দিয়ে তথ্যমূলক, সতর্কীকরণ বা ত্রুটির বার্তা (লগ / তীব্রতার স্তরের উপর নির্ভর করে) লগ করতে হবে।
চলুন প্রথমে কোড অ্যাসিস্টকে এটি জিজ্ঞাসা করে দেখি। নিম্নলিখিত প্রম্পটটি চেষ্টা করুন:
How do I use the google-cloud-logging package in Python?
আপনি এমন একটি উত্তর পাবেন, যাতে এ বিষয়ে কিছু তথ্য থাকবে, যা নিচে দেওয়া হলো:

চলুন, ক্যাটাগরি অনুযায়ী সেশন খোঁজার ফাংশনটিতে লগিং স্টেটমেন্ট যোগ করি।
প্রথমেই, requirements.txt ফাইলে google-cloud-logging পাইথন প্যাকেজটি যোগ করুন।
এরপরে একটি কোডের অংশ রয়েছে যা দেখায়, আমরা কীভাবে লগিং বাস্তবায়নের জন্য কোডটি একীভূত করেছি:
...
from google.cloud import logging
...
app = Flask(__name__)
# Create a logger
logger = logging.Client().logger('my-log')
@app.route('/sessions/categories/<category>', methods=['GET'])
def get_sessions_by_category(category):
logger.log_text(f"Fetching sessions with category {category}")
sessions_by_category = [session for session in sessions.sessions if category in session['categories']]
logger.log_text(f'Found {len(sessions_by_category)} sessions with category {category}')
return jsonify(sessions_by_category)
# # Other App Routes
পূর্ববর্তী বিভাগের মতো একই কমান্ড ব্যবহার করে সার্ভিসটি আবার ক্লাউড রান-এ ডেপ্লয় করুন, এবং এটি ডেপ্লয় হয়ে গেলে, /sessions/categories/<category> এন্ডপয়েন্টে কয়েকটি কল চালান।
Cloud Console → Logs Explorer এ যান

...এবং আপনি নিচে দেখানো পদ্ধতিতে এই লগিং স্টেটমেন্টগুলো ফিল্টার করতে পারবেন:

আপনি যেকোনো লগ স্টেটমেন্টে ক্লিক করে, সেটিকে এক্সপ্যান্ড করে Explain this log entry তে ক্লিক করতে পারেন, যা জেমিনি ব্যবহার করে লগ এন্ট্রিটি ব্যাখ্যা করবে। উল্লেখ্য যে, আপনি যদি গুগল ক্লাউডের জন্য জেমিনি এনাবল না করে থাকেন, তাহলে আপনাকে ক্লাউড এআই কম্প্যানিয়ন এপিআই (Cloud AI Companion API) এনাবল করতে বলা হবে। অনুগ্রহ করে নির্দেশ অনুযায়ী তা করে নিন।
নীচে একটি নমুনা উত্তর দেওয়া হল:

১৬. অভিনন্দন
অভিনন্দন, আপনি সফলভাবে শুরু থেকে একটি অ্যাপ্লিকেশন তৈরি করেছেন এবং ডিজাইন, বিল্ড, টেস্টিং ও ডেপ্লয়মেন্ট সহ এসডিএলসি-র বিভিন্ন পর্যায়ে জেমিনি কোড অ্যাসিস্ট ব্যবহার করেছেন।
এরপর কী?
এই কোডল্যাবগুলো দেখে নিন...
- ডেভেলপারদের জন্য ডুয়েট এআই-এর একটি সফর
- সফটওয়্যার ডেভেলপমেন্ট লাইফ সাইকেল জুড়ে ডুয়েট এআই-এর ব্যবহার
- ডেভেলপারদের জন্য ডুয়েট এআই দিয়ে স্টাইলিশ হয়ে উঠুন