Skip to content

Commit

Permalink
Tagline Generation resolved
Browse files Browse the repository at this point in the history
  • Loading branch information
murtaza-sadri-19 committed Oct 9, 2024
1 parent 829bc95 commit 5b3bc59
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 64 deletions.
41 changes: 20 additions & 21 deletions ai/generateTagline.js
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
const { GoogleGenerativeAI } = require("@google/generative-ai");

const genAI = new GoogleGenerativeAI(process.env.GEMINI_KEY);
const genAI = new GoogleGenerativeAI(process.env.API_enter_here);
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.
`;
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: ${topLanguages}
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
try {
const result = await model.generateContent(prompt);
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";
}
}
79 changes: 39 additions & 40 deletions src/app/api/ai/route.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ import { NextResponse } from "next/server";
const GITHUB_API_URL = "https://api.github.com/graphql";

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

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

const query = `
const query = `
query ($login: String!) {
user(login: $login) {
login
Expand All @@ -35,41 +35,40 @@ export async function POST(req) {
}
`;

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 },
}),
});
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,
});
}
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 });
const data = await response.json();
console.log(data);
if (data.data.user) {
const contributions = data.data.user.contributionsCollection;
const tagline = await generateUserTagline(username, contributions);
return NextResponse.json({
exists: true,
tagline,
});
} else {
return NextResponse.json({ exists: false });
}
}
export default contributions;
} catch (error) {
console.error("Error checking GitHub username:", error);
return new NextResponse("Internal Server Error", { status: 500 });
}
}
29 changes: 26 additions & 3 deletions src/app/page.jsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,30 @@
import Home from "../../components/Home";
import { useState, useEffect } from "react";
import { useRouter } from "next/navigation";
import { generateUserTagline } from "../api/ai/route";

function UserPage({ params }) {
const { username } = params;
const router = useRouter();
const [tagline, setTagline] = useState("");

useEffect(() => {
const fetchTagline = async () => {
const response = await fetch(`/api/ai?username=${username}`);
const data = await response.json();
if (data.exists) {
setTagline(data.tagline);
} else {
setTagline("No tagline available");
}
};
fetchTagline();
}, [username]);

export default function Page() {
return (
<Home />
<div>
<h1>{tagline}</h1>
</div>
);
}

export default UserPage;

0 comments on commit 5b3bc59

Please sign in to comment.