Skip to content

Commit

Permalink
Merge pull request #22 from garimabhayanaa/master
Browse files Browse the repository at this point in the history
issue 19 resolved. tagline generation using gemini successfully added.
  • Loading branch information
vansh-codes authored Oct 9, 2024
2 parents fc8b2a5 + e01b5cd commit f21aff6
Show file tree
Hide file tree
Showing 5 changed files with 242 additions and 5 deletions.
28 changes: 28 additions & 0 deletions ai/generateTagline.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
const { GoogleGenerativeAI } = require("@google/generative-ai");

const genAI = new GoogleGenerativeAI(process.env.GEMINI_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

export async function generateUserTagline(username, contributions) {
const prompt = `
Generate a custom tagline for the GitHub user "${username}" based on the following activity and contribution patterns:
- Total Contributions: ${contributions.totalCommitContributions}
- Active Coding Days: ${contributions.contributionCalendar.totalContributions}
- Most Used Programming Languages: (You can add logic to fetch this info if needed)
The tagline should be consistent, meaningful, and provide an at-a-glance summary of the user's work.
`;

try {
const result = await model.generateContent(prompt);
// Assuming the API returns a JSON object with a 'tagline' field
if (result.response) {
return result.response.text;
} else {
throw new Error("Tagline not found in the response");
}
} catch (error) {
console.error("Error generating tagline:", error);
return "No tagline available"; // Fallback message
}
}
132 changes: 129 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,17 @@
"lint": "next lint"
},
"dependencies": {
"@google/generative-ai": "^0.21.0",
"axios": "^1.7.7",
"next": "14.2.13",
"next-themes": "^0.3.0",
"react": "^18",
"react": "^18.3.1",
"react-dom": "^18",
"react-hot-toast": "^2.4.1"
},
"devDependencies": {
"@types/react": "^18.3.11",
"@types/react-dom": "^18.3.0",
"eslint": "^8",
"eslint-config-next": "14.2.13",
"postcss": "^8",
Expand Down
6 changes: 5 additions & 1 deletion src/app/[username]/page.jsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
'use client';
import { generateUserTagline } from "../../../ai/generateTagline";
import { useSearchParams, useRouter } from "next/navigation";
import { useEffect, useState } from "react";
import {contributions} from '../api/ai/route'

function UserPage({ params }) {
const { username } = params;
Expand Down Expand Up @@ -34,12 +36,14 @@ function UserPage({ params }) {
router.push(`/${username}${queryString}`);
};

const tagline=generateUserTagline(username,contributions);

return (
<div
className="flex flex-col justify-center items-center h-screen"
style={{ backgroundColor: theme, color: textColor }}
>
<h1 className="text-2xl font-bold mb-4">Welcome, {username}!</h1>
<h1 className="text-2xl font-bold mb-4">{tagline}!</h1>
<div className="flex space-x-4">
<div>
<label className="block mb-2">Background Color</label>
Expand Down
75 changes: 75 additions & 0 deletions src/app/api/ai/route.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import { NextResponse } from "next/server";
const GITHUB_API_URL = "https://api.github.com/graphql";

export async function POST(req) {
const { username } = await req.json();

if (!username) {
return new NextResponse("Username required", { status: 400 });
}

const query = `
query ($login: String!) {
user(login: $login) {
login
contributionsCollection {
totalCommitContributions
contributionCalendar {
totalContributions
}
pullRequestContributionsByRepository {
repository {
name
}
totalCount
}
}
repositories(first: 100, orderBy: {field: STARGAZERS, direction: DESC}) {
nodes {
primaryLanguage {
name
}
}
}
}
}
`;

try {
const response = await fetch(GITHUB_API_URL, {
method: "POST",
headers: {
Accept: "application/json",
Authorization: `Bearer ${process.env.GITHUB_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query,
variables: { login: username },
}),
});

if (!response.ok) {
return new NextResponse(await response.text(), {
status: response.status,
});
}

const data = await response.json();
console.log(data);
if (data.data.user) {
const contributions = data.data.user.contributionsCollection;
return NextResponse.json({
exists: true,
totalContributions: contributions.totalCommitContributions,
activeCodingDays: contributions.contributionCalendar.totalContributions
});
} else {
return NextResponse.json({ exists: false });
}
} catch (error) {
console.error("Error checking GitHub username:", error);
return new NextResponse("Internal Server Error", { status: 500 });
}
}
export default contributions;

0 comments on commit f21aff6

Please sign in to comment.