Thursday, July 25, 2024

Gemini Flash LLM use to process image

You can use following code to process images using Googel Gemini LLM. 

import streamlit as st
import os
import google.generativeai as genai
from PIL import Image

genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
model=genai.GenerativeModel("gemini-1.5-flash")

def get_gemini_response(input,image):
    if input!="":
        response=model.generate_content([input,image])
    else:
        response=model.generate_content(image)
    return response.text

st.set_page_config(page_title="Generative AI")
st.header("Gemini Image App")
input=st.text_input("input : ",key="input")
uploaded_file = st.file_uploader("Choose an image...", type=["jpg","jpeg","png"])
image =""

if uploaded_file is not None:
    image=Image.open(uploaded_file)
    st.image(image, caption="Uploaded Image", use_column_width=True)
submit=st.button("Tell me about image")

if submit:
    response=get_gemini_response(input,image)
    st.subheader("The response is ")
    st.write(response)

Refer gitlab source for more information;

https://gitlab.com/sujithdc/gemini-ai-text-image

Gemini Pro AI Text Processing

You can use the following python code to process your text using Google Gemini GPT pro LLM model. To execute the code, you need to get API key from "https://aistudio.google.com/app/apikey" and install required python packages using "pip install <library>".

from dotenv import load_dotenv
load_dotenv()
import streamlit as st
import os
import google.generativeai as genai

genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
model=genai.GenerativeModel("gemini-pro")
def get_gemini_response(question):
    response=model.generate_content(question)
    return response.text

st.set_page_config(page_title="Generative AI")
st.header("Gemini AI App")
input=st.text_input("input : ",key="input")
submit=st.button("Ask Question")

if submit:
    response=get_gemini_response(input)
    st.subheader("Gemini Response")
    st.write(response)

Refer gitlab source for more information;

https://gitlab.com/sujithdc/gemini-ai-text-image

Friday, August 25, 2023

Mongo Shell Commands

 Following commands can be used in mongo db shell.

show dbs

  • list of all the databases

use shops

  • switch to a specific database or creates a database (shops) 

db.createCollection("products")

  • creating the collection (products)

show collections

  • display a list of all the collections 

 db.products.insertOne({"name":"prod_name1"})

  • insert a document into a collection

db.products.insertMany([{"name":"prod_name2"},{"name":"prod_name3"}])

  • insert many products in one command

db.products.insertOne({"name":"test_prod4","vendor":{"name":"vendor_1","address":"address_1"}})

  • insert many products in one command with multiple objects

db.student.insertOne({"name":"test_prod5",,"vendor":{"name":"vendor_1","address":{"address_line1":"line1","address_line2":"line2","city":"city"}}})

  • insert many products in one command with multiple objects

db.products.find()

  • retrieve all documents

db.products.update({name:"test_prod1"},{$set:{price:"120.00"}})

  • update a document in the "products" collection. updates first document only for name:"test_prod1" 

db.student.update({"name":"test_6"},{$set:{age:26}},{multi:true})

  • updating all document

db.student.update({_id:ObjectId("64dc5856e4cebb07084d8c45")},{$unset:{price:"120.00"}})

  • updating the document using object id and remove price attribute

db.teaches.update({"th_name":"test_th_2"},{$set:{student:[{"std_name":"test_1"},{"std_name":"test_2"}]}})

  • adding the Student object field

db.student.find({$and:[{"name":"test_4"},{"age":"40"}]})

  • AND operation. returns all objects with name =test_4 and age=40

db.student.find({$or:[{"name":"test_4"},{"name":"test_2"}]})

  • OR operation and returns name = test_2 or test_4

db.student.drop()

  • drop student collection

db.teaches.remove({"name":"t_name1"})

  • remove document name =t_name1

db.teaches.deleteOne({"name":"t_name2"})

  • remove one document with name=t_name2

db.student.aggregate([{$lookup:{from:"teaches",localField:"std_name",foreignField:"student.std_name",as:"studentDetails"}}])

  • aggregation operation in MongoDB to join the "student" collection with the "teaches" collection

db.mycol.find().pretty() 

  • return results in formatted way



Wednesday, July 19, 2023

#!/bin/bash

ps -ef |grep "java -jar" > /apps/appcheck

x=$(cat /apps/appcheck |grep "TestApp.jar" |wc -l)
echo $x

        if [ $x = 0 ]

        then
                date
                echo ""
                echo "starting... check logs "
                cd /apps/sujith/test
                nohup java -jar -Xms128m -Xmx256m TestApp.jar 2 >> TestApp.log &
        elif [ $x = 1 ]

        then
                date
                echo "stopping..."
                cat /apps/appcheck|grep "TestApp.jar" | awk -F " " '{print $2}' | xargs kill -9
                echo "stopped"
                date
                echo "starting..."
                cd /apps/sujith/test
                nohup java -jar -Xms128m -Xmx256m ThripleNine.jar 2>> TestApp.log &

        else
                echo "error occurred. check."

        fi


Tuesday, June 27, 2023

kubernetes pod sample files

simple nginx pod

apiVersion: v1
kind: Pod
metadata:
    name: nginx-pod
    labels:
        app: nginx
        tier: dev
spec:
    containers:
        - name: nginx-container
          image: nginx

multiple containers in one pod

apiVersion: v1
kind: Pod
metadata:
  name: nginx-caching-server
  labels:
    purpose: demonstrate-multi-container-pod
spec:
  containers:
  - name: nginx-container1
    image: nginx

  - name: busybox-container2
    image: busybox
    command:
      - sleep
      - "3600"

replica controller

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx-rc
spec:
  replicas: 3
  template:
    metadata:
      name: nginx-pod
      labels:
        app: nginx-app
    spec:
      containers:
      - name: nginx-container
        image: nginx
        ports:
        - containerPort: 80
  selector:
    app: nginx-app

replica set

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-rs
spec:
  replicas: 3
  template:
    metadata:
      name: nginx-pod
      labels:
        app: nginx-app
        tier: frontend
    spec:
      containers:
      - name: nginx-container
        image: nginx
        ports:
        - containerPort: 80
  selector:
    matchLabels:
      app: nginx-app
    matchExpressions:
      - {key: tier, operator: In, values: [frontend]}

daemon set
daemon set guarantee to up and run one instance in every node

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-ds
spec:
  template:
    metadata:
      labels:
        name: fluentd
    spec:
      containers:
      - name: fluentd
        image: gcr.io/google-containers/fluentd-elasticsearch:1.20
  selector:
    matchLabels:
      name: fluentd

up and run pods for special nodes only using daemon set(diskType=ssd)

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-ds
spec:
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
      - name: nginx-container
        image: nginx
      nodeSelector:
        disktype: ssd
  selector:
    matchLabels:
      name: nginx


batch execution pod. it will print 9 to 1 when execution.

apiVersion: batch/v1
kind: Job
metadata:
  name: countdown
spec:
  template:
    metadata:
      name: countdown
    spec:
      containers:
      - name: counter
        image: centos:7
        command:
         - "bin/bash"
         - "-c"
         - "for i in 9 8 7 6 5 4 3 2 1 ; do echo $i ; done"
      restartPolicy: Never

nginx deployment pod

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  labels:
    app: nginx-app
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx-app
    spec:
      containers:
      - name: nginx-container
        image: nginx
        ports:
        - containerPort: 80
  selector:
    matchLabels:
      app: nginx-app

redis deployment using Recreate
In "Recreate", it will terminate all containers at once and restart required containers.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-deployment
  labels:
    app: redis

spec:
  replicas: 10
  selector:
    matchLabels:
      app: redis
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
        - name: redis-container
          image: redis:5.0

redis deployment using RollingUpdate
in "RollingUpdate", requested number of containers will be updated.
new instance will up and old instance will down in this scenario.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-deployment
  labels:
    app: redis

spec:
  replicas: 15
  selector:
    matchLabels:
      app: redis
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 2
      maxUnavailable: 2
  minReadySeconds: 10
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
        - name: redis-container
          image: redis:6.0 #Upgrade to 6.0 --> 6.0.16 --> 6.2.6

volume usage
when using volume, it can replicate to every containers config in pod file

apiVersion: v1
kind: Pod
metadata:
  name: sidecar-pod
spec:
  volumes:
  - name: logs
    emptyDir: {}

  containers:
  - name: app-container
    image: alpine
    command: ["/bin/sh"]
    args: ["-c", "while true; do date >> /var/log/app.log; sleep 5; done"]
    volumeMounts:
    - name: logs
      mountPath: /var/log
     
  - name: log-exporter-sidecar
    image: nginx
    ports:
      - containerPort: 80
    volumeMounts:
    - name: logs
      mountPath: /usr/share/nginx/html

volume "emptyDir" usage

apiVersion: v1
kind: Pod
metadata:
  name: nginx-emptydir
spec:
  containers:
  - name: nginx-container
    image: nginx
    volumeMounts:
    - name: test-vol
      mountPath: /test-mnt
  volumes:
  - name: test-vol
    emptyDir: {}

nginx deploymnet with 2 replicas

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

 

Friday, June 2, 2023

Kubernetes Commands

kubectl get nodes returns available nodes in k8s cluster

kubectl get po returns available pods in k8s cluster

kubectl get po -o wide return ip address and other details of pod 

kubectl create -f poddemo.yml create pod using yml file. this will create a pod with nginx

Sample yaml file for pod creation 

apiVersion: v1
kind: Pod
metadata:
    name: nginx-pod
    labels:
        app: nginx
        tier: dev
spec:
    containers:
        - name: nginx-container
          image: nginx

kubectl describe pod nginx-pod returns details about pod

kubectl delete pod nginx-pod delete pod nginx-pod

kubectl delete pod --all delete all pods

kubectl expose pod nginx-pod --type="NodePort" --port=8080 expose pod in 8080 port as a service

kubectl get svc returns services exposed

kubectl delete svc nginx-pod delete service  nginx-pod

kubectl exec -it nginx-caching-server bash access to nginx-caching-server bash terminal

kubectl exec -it nginx-caching-server -c busybox-container2 sh access nginx-caching-server pod's container "busybox-container2" for sh

kubectl get rc returns returns replica controllers

kubectl get rs returns replica set

kubectl scale rc nginx-rc --replicas=5 scale replica controller size to 5 for nginx-rc

kubectl delete  rc --all delete all replica controllers

kubectl delete  rs --all delete all replica sets

kubectl label nodes node2 diskType=ssd change node 2's diskType to ssh

kubectl get nodes --show-labels returns all labels

kubectl get job return batch job details

kubectl describe jobs countdown retrieve details about countdown pod's job

kubectl logs countdown-rmc97 returns logs of "countdown-rmc97" container

kubectl get deploy returns deployments

kubectl delete deploy --all delete all deployments 

kubectl describe deploy nginx-deploy returns details of "nginx-deploy" deployment

kubectl set image deploy nginx-deploy nginx-container=nginx:1.9.1 --record change the image of nginx to 1.9.1

kubectl rollout status deployment/nginx-deploy returns rollout status of nginx-deploy

kubectl rollout history deployment/nginx-deploy returns rollout history of nginx-deploy

kubectl rollout undo deployment/nginx-deploy undo the changes 

kubectl rollout status deployment/nginx-deploy returns rollout status of nginx-deploy

kubectl describe deploy nginx-deploy | grep -i image returns image details of nginx-deploy

kubectl edit deployment redis-deployment edit the deployment configurations of "redis-deployment"

Thursday, June 1, 2023

Enable RabbitMQ plugins

In RabbitMQ command prompt, use following commands to enable plugins.

rabbitmq-plugins enable rabbitmq_management