HEX
Server: nginx/1.18.0
System: Linux vcwordpress 5.15.0-174-generic #184-Ubuntu SMP Fri Mar 13 18:41:50 UTC 2026 x86_64
User: root (0)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/igsms.viitorcloud.co/igsmsportal/services/geminiService.ts
import { GoogleGenAI, Type } from "@google/genai";

const ai = new GoogleGenAI({ apiKey: process.env.API_KEY });

export const autoCategorizeGrievance = async (description: string) => {
  try {
    const response = await ai.models.generateContent({
      model: "gemini-3-flash-preview",
      contents: `Analyze the following public grievance and suggest the most appropriate Government Department and Category.
      Description: "${description}"`,
      config: {
        responseMimeType: "application/json",
        responseSchema: {
          type: Type.OBJECT,
          properties: {
            department: { type: Type.STRING, description: "Name of the government department (e.g., Water Supply, Revenue, Health, Education, Urban Development)" },
            category: { type: Type.STRING, description: "Specific category of grievance within that department" },
            priority: { type: Type.STRING, enum: ["LOW", "MEDIUM", "HIGH", "URGENT"] }
          },
          required: ["department", "category", "priority"]
        }
      }
    });

    return JSON.parse(response.text || "{}");
  } catch (error) {
    console.error("AI Categorization failed", error);
    return null;
  }
};

export const summarizeGrievance = async (description: string) => {
  try {
    const response = await ai.models.generateContent({
      model: "gemini-3-flash-preview",
      contents: `Summarize this public grievance in 2-3 concise bullet points for a government officer to review quickly:
      "${description}"`,
      config: {
        systemInstruction: "You are a professional administrative assistant for the Government of Gujarat. Provide concise, objective summaries."
      }
    });

    return response.text;
  } catch (error) {
    console.error("AI Summarization failed", error);
    return "Summary unavailable.";
  }
};