From e35df34652db3a6422cf068068b444bbd6387fae Mon Sep 17 00:00:00 2001 From: Ted Spare Date: Fri, 19 Jan 2024 15:09:45 -0500 Subject: [PATCH] Feat: usage charts and tables (#88) * Add usage charts and tables --------- Co-authored-by: arihanv Co-authored-by: Arihan Varanasi <63890951+arihanv@users.noreply.github.com> --- README.md | 11 +- app/api/webhook/github/route.ts | 5 +- app/dashboard/(base)/layout.tsx | 6 +- app/dashboard/(base)/page.tsx | 2 +- .../(base)/usage/[[...metric]]/layout.tsx | 35 ++++ .../(base)/usage/[[...metric]]/loading.tsx | 12 ++ .../(base)/usage/[[...metric]]/page.tsx | 20 +++ app/dashboard/(base)/usage/page.tsx | 5 - app/dashboard/Loader/SpinnerLoader.tsx | 2 +- app/dashboard/layout.tsx | 6 +- .../repo/[projectId]/instructions/actions.ts | 26 +++ .../repo/[projectId]/instructions/page.tsx | 7 +- bun.lockb | Bin 356809 -> 372826 bytes lib/agents/engineer.ts | 50 +++++- lib/agents/maige.ts | 59 +++++-- lib/agents/reviewer.ts | 52 ++++-- lib/components/dashboard/Input/TextArea.tsx | 2 +- .../dashboard/Instructions/Instructions.tsx | 105 +++++++---- .../Instructions/new-instruction.tsx | 40 +++++ .../dashboard/Navigation/MainNavigation.tsx | 21 +-- .../dashboard/Navigation/RepoNavigation.tsx | 11 +- lib/components/dashboard/Text/Subtext.tsx | 2 +- lib/components/dashboard/usage/chart.tsx | 48 +++++ .../dashboard/usage/charts-links.tsx | 43 +++++ lib/components/dashboard/usage/charts.tsx | 82 +++++++++ .../dashboard/usage/custom-table.tsx | 128 ++++++++++++++ lib/components/dashboard/usage/search.tsx | 35 ++++ .../dashboard/usage/table-wrapper.tsx | 132 ++++++++++++++ lib/components/feedback/actions.tsx | 23 +++ lib/components/feedback/feedback.tsx | 75 ++++++++ lib/components/ui/checkbox.tsx | 28 +++ lib/components/ui/input.tsx | 25 +++ lib/components/ui/popover.tsx | 33 ++++ lib/components/ui/table.tsx | 124 +++++++++++++ lib/components/ui/textarea.tsx | 24 +++ lib/hooks/debounce.ts | 15 ++ lib/tests/weaviate.test.ts | 2 +- lib/tools/dispatchEngineer.ts | 7 +- lib/tools/dispatchReviewer.ts | 3 + next.config.mjs | 8 +- package.json | 165 +++++++++--------- prisma/schema.prisma | 64 ++++--- tailwind.config.js | 93 +++++++++- 43 files changed, 1423 insertions(+), 213 deletions(-) create mode 100644 app/dashboard/(base)/usage/[[...metric]]/layout.tsx create mode 100644 app/dashboard/(base)/usage/[[...metric]]/loading.tsx create mode 100644 app/dashboard/(base)/usage/[[...metric]]/page.tsx delete mode 100644 app/dashboard/(base)/usage/page.tsx create mode 100644 app/dashboard/repo/[projectId]/instructions/actions.ts create mode 100644 lib/components/dashboard/Instructions/new-instruction.tsx create mode 100644 lib/components/dashboard/usage/chart.tsx create mode 100644 lib/components/dashboard/usage/charts-links.tsx create mode 100644 lib/components/dashboard/usage/charts.tsx create mode 100644 lib/components/dashboard/usage/custom-table.tsx create mode 100644 lib/components/dashboard/usage/search.tsx create mode 100644 lib/components/dashboard/usage/table-wrapper.tsx create mode 100644 lib/components/feedback/actions.tsx create mode 100644 lib/components/feedback/feedback.tsx create mode 100644 lib/components/ui/checkbox.tsx create mode 100644 lib/components/ui/input.tsx create mode 100644 lib/components/ui/popover.tsx create mode 100644 lib/components/ui/table.tsx create mode 100644 lib/components/ui/textarea.tsx create mode 100644 lib/hooks/debounce.ts diff --git a/README.md b/README.md index 432a9511..661d055d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Maige +_Staging._ + Repo maintenance made simpler. Quickly set up Maige and let AI handle your issue labels with ease. Get started at [Maige.app](https://maige.app). @@ -19,14 +21,15 @@ Create a GitHub App for webhooks and repo access. Populate your **.env** with th 2. Copy your app name, ID, and client secret. Add these to your **.env**. 3. Callback URL: nGrok URL + GitHub auth endpoint eg. `https://abc.ngrok.app/api/auth/callback/github` 4. Webhook URL: nGrok URL + handler path eg. `https://abc.ngrok.app/api/webhook/github`. -6. Webhook secret: generate this with `openssl rand -hex 32`. Add it to your **.env**. -7. Permissions: toggle **Read & Write** for **Contents**, **Issues**, **Pull Requests**. -8. Events: toggle **issues**, **issue comments**, and **pull requests**. -9. Private key: generate a private key. Download it. Run the following command ([source](https://github.com/gr2m/universal-github-app-jwt?tab=readme-ov-file#converting-pkcs1-to-pkcs8)) to convert it to the right format: +5. Webhook secret: generate this with `openssl rand -hex 32`. Add it to your **.env**. +6. Permissions: toggle **Issue: Read & Write** and **Pull Request: Read & Write**. +7. Events: toggle **issues**, **issue comments**, and **pull requests**. +8. Private key: generate a private key. Download it. Run the following command ([source](https://github.com/gr2m/universal-github-app-jwt?tab=readme-ov-file#converting-pkcs1-to-pkcs8)) to convert it to the right format: ```sh openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in private-key.pem -out private-key-pkcs8.key ``` + then copy **private-key-pkcs8.key**'s text contents to your **.env**. ## Dive In diff --git a/app/api/webhook/github/route.ts b/app/api/webhook/github/route.ts index ddbd1d49..4bce32c2 100644 --- a/app/api/webhook/github/route.ts +++ b/app/api/webhook/github/route.ts @@ -197,6 +197,7 @@ export const POST = async (req: Request) => { name: payload?.repository?.name }, select: { + id: true, name: true, customInstructions: true } @@ -210,6 +211,8 @@ export const POST = async (req: Request) => { const instructions = projects?.[0]?.customInstructions.map(ci => ci.content).join('. ') || '' + const projectId = projects?.[0]?.id + // Get GitHub app instance access token const app = new App({ appId: env.GITHUB_APP_ID || '', @@ -299,8 +302,8 @@ Your instructions: ${instructions || 'do nothing'}. await maige({ input: prompt, octokit, - prisma, customerId, + projectId, repoFullName: `${owner}/${name}`, issueNumber: issue?.number, issueId: issue?.node_id, diff --git a/app/dashboard/(base)/layout.tsx b/app/dashboard/(base)/layout.tsx index e6a0bed9..d64c42fa 100644 --- a/app/dashboard/(base)/layout.tsx +++ b/app/dashboard/(base)/layout.tsx @@ -1,6 +1,7 @@ import {ApplicationProvider} from 'lib/components/dashboard/ApplicationProvider' import {Toaster} from 'sonner' import {MainNavigation} from '~/components/dashboard/Navigation' +import Feedback from '~/components/feedback/feedback' export default async function RootLayout({ children @@ -8,12 +9,13 @@ export default async function RootLayout({ children: React.ReactNode }) { return ( -
- +
+
{children}
+
) } diff --git a/app/dashboard/(base)/page.tsx b/app/dashboard/(base)/page.tsx index b3fdb143..b71722f5 100644 --- a/app/dashboard/(base)/page.tsx +++ b/app/dashboard/(base)/page.tsx @@ -8,7 +8,7 @@ import prisma from '~/prisma' export default async function Page() { const session = await getServerSession(authOptions) - if (!session) redirect('/auth') + if (!session?.user?.githubUserId) redirect('/auth') const customer = await prisma.customer.findUnique({ where: { diff --git a/app/dashboard/(base)/usage/[[...metric]]/layout.tsx b/app/dashboard/(base)/usage/[[...metric]]/layout.tsx new file mode 100644 index 00000000..83bd1c1e --- /dev/null +++ b/app/dashboard/(base)/usage/[[...metric]]/layout.tsx @@ -0,0 +1,35 @@ +import {notFound} from 'next/navigation' +import z from 'zod' +import {UsageCharts} from '~/components/dashboard/usage/charts' +import ChartsLinks from '~/components/dashboard/usage/charts-links' + +const paramsSchema = z.enum(['runs', 'tokens']) + +export default async function RootLayout({ + children, + params +}: { + children: React.ReactNode + params: { + metric: string[] | undefined + } +}) { + if ( + params.metric && + (params.metric.length > 1 || + !paramsSchema.safeParse(params?.metric[0]).success) + ) + return notFound() + + const route = params.metric ? params.metric[0] : '' + + return ( +
+ +
+ + {children} +
+
+ ) +} diff --git a/app/dashboard/(base)/usage/[[...metric]]/loading.tsx b/app/dashboard/(base)/usage/[[...metric]]/loading.tsx new file mode 100644 index 00000000..1e384b6f --- /dev/null +++ b/app/dashboard/(base)/usage/[[...metric]]/loading.tsx @@ -0,0 +1,12 @@ +import {Skeleton} from '~/components/ui/skeleton' + +type Props = {} + +export default function Loading({}: Props) { + return ( +
+ + +
+ ) +} diff --git a/app/dashboard/(base)/usage/[[...metric]]/page.tsx b/app/dashboard/(base)/usage/[[...metric]]/page.tsx new file mode 100644 index 00000000..a9b39069 --- /dev/null +++ b/app/dashboard/(base)/usage/[[...metric]]/page.tsx @@ -0,0 +1,20 @@ +import UsageTable from '~/components/dashboard/usage/table-wrapper' + +export default async function Usage({ + searchParams, + params +}: { + searchParams: {[key: string]: string | string[] | undefined} + params: { + metric: string[] | undefined + } +}) { + const route = params.metric ? params.metric[0] : '' + + return ( + + ) +} diff --git a/app/dashboard/(base)/usage/page.tsx b/app/dashboard/(base)/usage/page.tsx deleted file mode 100644 index 5d67fa16..00000000 --- a/app/dashboard/(base)/usage/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -type Props = {} - -export default function Usage({}: Props) { - return
Coming Soon...
-} diff --git a/app/dashboard/Loader/SpinnerLoader.tsx b/app/dashboard/Loader/SpinnerLoader.tsx index 7dc6a534..336965dc 100644 --- a/app/dashboard/Loader/SpinnerLoader.tsx +++ b/app/dashboard/Loader/SpinnerLoader.tsx @@ -3,7 +3,7 @@ export function SpinnerLoader() {
+
- {session && ( + {session ? ( - )} + ) : null}
{children}
) diff --git a/app/dashboard/repo/[projectId]/instructions/actions.ts b/app/dashboard/repo/[projectId]/instructions/actions.ts new file mode 100644 index 00000000..61460d49 --- /dev/null +++ b/app/dashboard/repo/[projectId]/instructions/actions.ts @@ -0,0 +1,26 @@ +'use server' + +import {revalidatePath} from 'next/cache' +import {redirect} from 'next/navigation' + +export async function createInstruction(projectId: string, content: string) { + const req = await prisma.instruction.create({ + data: { + projectId: projectId, + content: content, + creatorUsername: 'Dashboard' + } + }) + revalidatePath(`/dashboard/repo/${projectId}/instructions`) + redirect(`/dashboard/repo/${projectId}/instructions#${req.id}`) +} + +export async function deleteInstruction(projectId: string, id: string) { + await prisma.instruction.delete({ + where: { + id: id + } + }) + revalidatePath(`/dashboard/repo/${projectId}/instructions`) + redirect(`/dashboard/repo/${projectId}/instructions`) +} diff --git a/app/dashboard/repo/[projectId]/instructions/page.tsx b/app/dashboard/repo/[projectId]/instructions/page.tsx index df59ea6c..dc4e0402 100644 --- a/app/dashboard/repo/[projectId]/instructions/page.tsx +++ b/app/dashboard/repo/[projectId]/instructions/page.tsx @@ -21,5 +21,10 @@ async function InstructionsWrapper({projectId}: {projectId: string}) { } }) - return + return ( + + ) } diff --git a/bun.lockb b/bun.lockb index 99079d5c3c58cbf1b5f12ecc4b7e82270d4c3b03..f3760e61616f11d8f14ae75fcd14bd6215662bf1 100755 GIT binary patch delta 89896 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 F{tqWi&-MTS delta 80606 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

2>O*`vRrLwHZY2SA$2=RoS`1(4b&yu%F{ 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 _z-oZ_;-9-`0H!$|cq> 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 diff --git a/lib/agents/engineer.ts b/lib/agents/engineer.ts index 16b96780..26ff039a 100644 --- a/lib/agents/engineer.ts +++ b/lib/agents/engineer.ts @@ -3,6 +3,7 @@ import {Octokit} from '@octokit/core' import {initializeAgentExecutorWithOptions} from 'langchain/agents' import {ChatOpenAI} from 'langchain/chat_models/openai' import env from '~/env.mjs' +import prisma from '~/prisma' import {codebaseSearch} from '~/tools/codeSearch' import commitCode from '~/tools/commitCode' import listFiles from '~/tools/listFiles' @@ -11,23 +12,41 @@ import writeFile from '~/tools/writeFile' import {getInstallationId, getInstallationToken} from '~/utils/github' import {isDev} from '~/utils/index' -const model = new ChatOpenAI({ - modelName: 'gpt-4-1106-preview', - openAIApiKey: env.OPENAI_API_KEY, - temperature: 0.3 -}) - export async function engineer({ task, repoFullName, issueNumber, - customerId + customerId, + projectId }: { task: string repoFullName: string issueNumber: number customerId: string + projectId: string }) { + let tokens = { + prompt: 0, + completion: 0 + } + + const model = new ChatOpenAI({ + modelName: 'gpt-4-1106-preview', + openAIApiKey: env.OPENAI_API_KEY, + temperature: 0.3, + callbacks: [ + { + async handleLLMEnd(data) { + tokens = { + prompt: tokens.prompt + (data?.llmOutput?.tokenUsage?.promptTokens || 0), + completion: + tokens.completion + (data?.llmOutput?.tokenUsage?.completionTokens || 0) + } + } + } + ] + }) + const {content: title} = await model.call([ 'Could you output a very concise PR title for this request?', `Task: ${task}` @@ -82,6 +101,23 @@ Your final output message should be the message that will be included in the pul returnIntermediateSteps: isDev, handleParsingErrors: true, // verbose: true, + callbacks: [ + { + async handleChainEnd() { + await prisma.usage.create({ + data: { + projectId: projectId, + totalTokens: tokens.prompt + tokens.completion, + promptTokens: tokens.prompt, + completionTokens: tokens.completion, + action: 'Create some stuff with engineer', + agent: 'engineer', + model: 'gpt-4-1106-preview' + } + }) + } + } + ], agentArgs: { prefix } diff --git a/lib/agents/maige.ts b/lib/agents/maige.ts index ca520b42..31bc984d 100644 --- a/lib/agents/maige.ts +++ b/lib/agents/maige.ts @@ -1,6 +1,7 @@ import {initializeAgentExecutorWithOptions} from 'langchain/agents' import {ChatOpenAI} from 'langchain/chat_models/openai' import env from '~/env.mjs' +import prisma from '~/prisma' import {codebaseSearch} from '~/tools/codeSearch' import commentTool from '~/tools/comment' import dispatchEngineer from '~/tools/dispatchEngineer' @@ -10,17 +11,11 @@ import {labelTool} from '~/tools/label' import updateInstructionsTool from '~/tools/updateInstructions' import {isDev} from '~/utils/index' -const model = new ChatOpenAI({ - modelName: 'gpt-4-1106-preview', - openAIApiKey: env.OPENAI_API_KEY, - temperature: 0 -}) - export async function maige({ input, octokit, - prisma, customerId, + projectId, repoFullName, issueNumber, issueId, @@ -31,8 +26,8 @@ export async function maige({ }: { input: string octokit: any - prisma: any customerId: string + projectId: string repoFullName: string issueNumber?: number issueId?: string @@ -41,6 +36,29 @@ export async function maige({ comment: any beta?: boolean }) { + let tokens = { + prompt: 0, + completion: 0 + } + + const model = new ChatOpenAI({ + modelName: 'gpt-4-1106-preview', + openAIApiKey: env.OPENAI_API_KEY, + temperature: 0, + streaming: false, + callbacks: [ + { + async handleLLMEnd(data) { + tokens = { + prompt: tokens.prompt + (data?.llmOutput?.tokenUsage?.promptTokens || 0), + completion: + tokens.completion + (data?.llmOutput?.tokenUsage?.completionTokens || 0) + } + } + } + ] + }) + const tools = [ labelTool({octokit, allLabels, issueId}), updateInstructionsTool({ @@ -54,10 +72,12 @@ export async function maige({ }), githubTool({octokit}), codebaseSearch({customerId, repoFullName}), - ...(beta ? [dispatchEngineer({issueNumber, repoFullName, customerId})] : []), + ...(beta + ? [dispatchEngineer({issueNumber, repoFullName, customerId, projectId})] + : []), ...(issueId ? [commentTool({octokit, issueId})] : []), ...(pullUrl && beta - ? [dispatchReviewer({octokit, pullUrl, repoFullName, customerId})] + ? [dispatchReviewer({octokit, pullUrl, repoFullName, customerId, projectId})] : []) ] @@ -84,7 +104,24 @@ All repo labels: ${allLabels // verbose: true, agentArgs: { prefix - } + }, + callbacks: [ + { + async handleChainEnd() { + await prisma.usage.create({ + data: { + projectId: projectId, + totalTokens: tokens.prompt + tokens.completion, + promptTokens: tokens.prompt, + completionTokens: tokens.completion, + action: 'Review an issue with maige', + agent: 'maige', + model: 'gpt-4-1106-preview' + } + }) + } + } + ] }) const {output} = await executor.call({input}) diff --git a/lib/agents/reviewer.ts b/lib/agents/reviewer.ts index e7934c1b..1f437205 100644 --- a/lib/agents/reviewer.ts +++ b/lib/agents/reviewer.ts @@ -7,16 +7,11 @@ import {codebaseSearch} from '~/tools/codeSearch' import {prComment} from '~/tools/prComment' import {isDev} from '~/utils/index' -const model = new ChatOpenAI({ - modelName: 'gpt-4-1106-preview', - openAIApiKey: env.OPENAI_API_KEY, - temperature: 0.3 -}) - export async function reviewer({ customerId, task, diff, + projectId, octokit, repoFullName, pullNumber, @@ -26,15 +21,35 @@ export async function reviewer({ customerId: string task: string diff: string + projectId: string octokit: any repoFullName: string pullNumber: number pullId?: string commitId: string }) { - /** - * New or updated PR - */ + let tokens = { + prompt: 0, + completion: 0 + } + + const model = new ChatOpenAI({ + modelName: 'gpt-4-1106-preview', + openAIApiKey: env.OPENAI_API_KEY, + temperature: 0.3, + callbacks: [ + { + async handleLLMEnd(data) { + tokens = { + prompt: tokens.prompt + (data?.llmOutput?.tokenUsage?.promptTokens || 0), + completion: + tokens.completion + (data?.llmOutput?.tokenUsage?.completionTokens || 0) + } + } + } + ] + }) + const prefix = ` You are a 1000x senior engineer looking at a pull request on GitHub. Follow these instructions: ${task}. @@ -83,7 +98,24 @@ export async function reviewer({ // verbose: true, agentArgs: { prefix - } + }, + callbacks: [ + { + async handleChainEnd() { + await prisma.usage.create({ + data: { + projectId: projectId, + totalTokens: tokens.prompt + tokens.completion, + promptTokens: tokens.prompt, + completionTokens: tokens.completion, + action: 'Review a PR with reviewer', + agent: 'reviewer', + model: 'gpt-4-1106-preview' + } + }) + } + } + ] }) const {output} = await executor.call({input: diffString}) diff --git a/lib/components/dashboard/Input/TextArea.tsx b/lib/components/dashboard/Input/TextArea.tsx index 99582c15..7f5e61e5 100644 --- a/lib/components/dashboard/Input/TextArea.tsx +++ b/lib/components/dashboard/Input/TextArea.tsx @@ -7,7 +7,7 @@ export function TextArea({ }) { return ( ) diff --git a/lib/components/dashboard/Instructions/Instructions.tsx b/lib/components/dashboard/Instructions/Instructions.tsx index e8fd11bd..902f9676 100644 --- a/lib/components/dashboard/Instructions/Instructions.tsx +++ b/lib/components/dashboard/Instructions/Instructions.tsx @@ -2,9 +2,10 @@ import {type Instruction} from '@prisma/client' import {ArrowTopRightIcon} from '@radix-ui/react-icons' -import {PenSquare} from 'lucide-react' +import {deleteInstruction} from 'app/dashboard/repo/[projectId]/instructions/actions' +import {PenSquare, XIcon} from 'lucide-react' import Link from 'next/link' -import {useState} from 'react' +import React, {useCallback, useState} from 'react' import {toast} from 'sonner' import {updateInstruction} from '~/actions/instructions' import {Button, buttonVariants} from '~/components/ui/button' @@ -12,25 +13,36 @@ import {cn} from '~/utils' import {PrimaryButton} from '../Buttons' import {TextArea} from '../Input' import {MediumBody, Subtext} from '../Text' +import NewInstruction from './new-instruction' -export function Instructions({instructions}: {instructions: Instruction[]}) { +export function Instructions({ + instructions, + projectId +}: { + instructions: Instruction[] + projectId: string +}) { return ( - <> +

) } @@ -44,21 +56,66 @@ function Instruction({ const [isEditing, setIsEditing] = useState(false) const [submitLoading, setSubmitLoading] = useState(false) const [content, setContent] = useState(instruction.content) + const [isDelete, setDelete] = useState(false) + + const handleSave = useCallback(async () => { + setSubmitLoading(true) + + const success = await updateInstruction(instruction.id, content) + + setSubmitLoading(false) + + if (success) { + setContent(content) // optimistically update state variable + setIsEditing(false) + + toast.info('Instruction updated') + } else toast.error('Error updating instruction') + }, [content, instruction.id]) + + const handleCancel = useCallback(() => { + setContent(instruction.content) + setIsEditing(false) + }, [instruction.content]) return ( -
+
+ {!isDelete && ( + + )}
{index + 1}
- - {instruction.creatorUsername} - - + {instruction.githubCommentLink ? ( + + {instruction.creatorUsername} + + + ) : ( + + {instruction.creatorUsername} + + )}
{!isEditing && ( @@ -88,25 +145,13 @@ function Instruction({ { - setSubmitLoading(true) - const success = await updateInstruction(instruction.id, content) - setSubmitLoading(false) - if (success) { - setContent(content) // optimistically update state variable - setIsEditing(false) - toast.info('Instruction updated') - } else toast.error('Error updating instruction') - }}> + onClick={handleSave}> Save
diff --git a/lib/components/dashboard/Instructions/new-instruction.tsx b/lib/components/dashboard/Instructions/new-instruction.tsx new file mode 100644 index 00000000..167bbfbe --- /dev/null +++ b/lib/components/dashboard/Instructions/new-instruction.tsx @@ -0,0 +1,40 @@ +import {createInstruction} from 'app/dashboard/repo/[projectId]/instructions/actions' +import {useState} from 'react' +import {Button} from '~/components/ui/button' +import {Popover, PopoverContent, PopoverTrigger} from '~/components/ui/popover' +import {Textarea} from '~/components/ui/textarea' + +type Props = { + projectId: string +} + +export default function NewInstruction({projectId}: Props) { + const [content, setContent] = useState('') + + return ( + + + + + +
+