Skip to content

Commit 865d42b

Browse files
committed
refactor: Convert AI Documentation to AI Feedback Generator
1 parent 2b8ef86 commit 865d42b

File tree

5 files changed

+77
-105
lines changed

5 files changed

+77
-105
lines changed

package-lock.json

Lines changed: 33 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/app/generator/repo-tree-generator.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { atomDark } from 'react-syntax-highlighter/dist/esm/styles/prism'
1111
import InteractiveTreeView from '@/components/interactive-tree-view'
1212
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
1313
import { validateGitHubUrl, validateGitLabUrl, fetchProjectStructure, generateStructure, buildStructureString } from '@/lib/repo-tree-utils'
14-
import AICodeDocumentation from '@/components/ai-code-documentation';
14+
import AICodeDocumentation from '@/components/ai-feedback';
1515

1616
interface ValidationError {
1717
message: string
@@ -199,7 +199,7 @@ export default function RepoProjectStructure() {
199199
<div className="space-y-6">
200200
<div className="flex flex-col space-y-3 sm:flex-row sm:space-y-0 sm:space-x-4">
201201
<Select value={repoType} onValueChange={(value: RepoType) => setRepoType(value)}>
202-
<SelectTrigger className="w-[180px]">
202+
<SelectTrigger className="w-[180px]" aria-label="Repository Type">
203203
<SelectValue placeholder="Select repo type" />
204204
</SelectTrigger>
205205
<SelectContent>

src/components/ai-code-documentation.tsx renamed to src/components/ai-feedback.tsx

Lines changed: 42 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,14 @@
33
import { useState } from 'react'
44
import { Button } from "@/components/ui/button"
55
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog"
6-
import { Progress } from "@/components/ui/progress"
76
import { Card } from "@/components/ui/card"
8-
import { Label } from "@/components/ui/label"
9-
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
10-
import { Loader2, FileText } from 'lucide-react'
7+
import { Loader2, MessageSquare } from 'lucide-react'
118

129
type StructureMap = Map<string, StructureMap | { type: 'file' }>
1310

1411
export default function AICodeDocumentation({ structureMap }: { structureMap: StructureMap }) {
1512
const [isOpen, setIsOpen] = useState(false)
1613
const [isGenerating, setIsGenerating] = useState(false)
17-
const [progress, setProgress] = useState(0)
1814
const [generatedDocs, setGeneratedDocs] = useState<string | null>(null)
1915

2016
const generateStructureDocs = (structure: StructureMap, depth: number = 0): string => {
@@ -35,17 +31,22 @@ export default function AICodeDocumentation({ structureMap }: { structureMap: St
3531

3632
const generatePrompt = (structure: StructureMap): string => {
3733
const structureDocs = generateStructureDocs(structure)
38-
return `Project Documentation\n\nFolder Structure:\n\n${structureDocs}`
34+
return `Provide 2-3 sentences of feedback on the repository's structure.
35+
36+
Project Structure:
37+
38+
${structureDocs}
39+
40+
Feedback:`
41+
}
42+
43+
const extractFeedback = (response: string): string => {
44+
const feedbackIndex = response.indexOf('Feedback:')
45+
return feedbackIndex !== -1 ? response.slice(feedbackIndex + 9).trim() : response.trim()
3946
}
4047

4148
const handleGenerate = async () => {
4249
setIsGenerating(true)
43-
setProgress(0)
44-
45-
for (let i = 0; i <= 100; i += 10) {
46-
setProgress(i)
47-
await new Promise(resolve => setTimeout(resolve, 500))
48-
}
4950

5051
try {
5152
const prompt = generatePrompt(structureMap)
@@ -60,83 +61,75 @@ export default function AICodeDocumentation({ structureMap }: { structureMap: St
6061
parameters: {
6162
max_length: 8000,
6263
temperature: 0.9,
63-
top_p: 0.8,
64-
}
65-
})
64+
top_p: 0.95,
65+
},
66+
}),
6667
})
6768

68-
if (!response.ok) throw new Error('Failed to generate documentation')
69+
if (!response.ok) {
70+
throw new Error('Failed to generate feedback')
71+
}
6972

7073
const result = await response.json()
71-
setGeneratedDocs(result[0].generated_text)
74+
75+
if (result && result[0]?.generated_text) {
76+
const feedback = extractFeedback(result[0].generated_text)
77+
setGeneratedDocs(feedback)
78+
} else {
79+
throw new Error('Invalid response format')
80+
}
7281
} catch (error) {
73-
console.error('Error generating documentation:', error)
74-
setGeneratedDocs('Error generating documentation. Please try again.')
82+
console.error('Error generating feedback:', error)
83+
setGeneratedDocs('Error generating feedback. Please try again.')
84+
} finally {
85+
setIsGenerating(false)
7586
}
76-
77-
setIsGenerating(false)
7887
}
7988

8089
return (
8190
<>
8291
<Button onClick={() => setIsOpen(true)} className="mt-4 w-full md:w-auto">
83-
<FileText className="h-4 w-4" /> Generate Documentation
92+
<MessageSquare className="h-4 w-4" /> Generate Feedback
8493
</Button>
8594
<Dialog open={isOpen} onOpenChange={setIsOpen}>
86-
<DialogContent className="sm:max-w-[800px] h-[90vh] flex flex-col">
95+
<DialogContent className="sm:max-w-[800px] max-h-[90vh] flex flex-col">
8796
<DialogHeader>
88-
<DialogTitle>Generate AI Documentation</DialogTitle>
97+
<DialogTitle>Generate AI Feedback</DialogTitle>
8998
<DialogDescription>
90-
Create documentation based on your repository structure.
99+
Get feedback on your repository structure.
100+
<em className="block mt-2">Instructions: First, generate your repository structure, then click Generate Feedback.</em>
91101
</DialogDescription>
92102
</DialogHeader>
93103

94-
<div className="grid gap-4 py-4">
95-
<div className="grid grid-cols-1 sm:grid-cols-4 items-center gap-4">
96-
<Label htmlFor="documentation-level" className="text-right sm:text-left">
97-
Documentation Level
98-
</Label>
99-
<Select>
100-
<SelectTrigger id="documentation-level" className="col-span-3">
101-
<SelectValue placeholder="Select level" />
102-
</SelectTrigger>
103-
<SelectContent>
104-
<SelectItem value="basic">Basic</SelectItem>
105-
<SelectItem value="detailed">Detailed</SelectItem>
106-
</SelectContent>
107-
</Select>
108-
</div>
109-
</div>
110-
111-
<div className="flex-grow overflow-hidden">
104+
<div className="flex-grow overflow-hidden my-6">
112105
{isGenerating ? (
113106
<div className="flex flex-col items-center justify-center h-full space-y-4">
114-
<Progress value={progress} className="w-full" />
115-
<p className="text-sm text-gray-500">Generating documentation...</p>
107+
<Loader2 className="h-6 w-6 animate-spin" />
108+
<p className="text-sm text-gray-500">Generating feedback...</p>
116109
</div>
117110
) : generatedDocs ? (
118111
<div className="h-full overflow-y-auto">
119112
<Card>
120113
<div className="p-4 h-full overflow-y-auto">
121-
<pre className="text-sm font-mono break-words whitespace-pre-wrap">{generatedDocs}</pre>
114+
<p className="text-sm whitespace-pre-wrap">{generatedDocs}</p>
122115
</div>
123116
</Card>
124117
</div>
125118
) : null}
126119
</div>
127120

128-
<DialogFooter className="mt-4">
121+
<DialogFooter>
129122
<Button onClick={handleGenerate} disabled={isGenerating} className="w-full sm:w-auto">
130123
{isGenerating ? (
131124
<>
132125
<Loader2 className="h-4 w-4 animate-spin" />
133126
Generating...
134127
</>
135-
) : 'Generate Documentation'}
128+
) : 'Generate'}
136129
</Button>
137130
</DialogFooter>
138131
<p className="mt-4 text-sm text-gray-600">
139-
<em>Note: The AI model can make mistakes or miss details. It may also struggle to document large repository structures.</em>
132+
<em>Note: This feedback is generated by an AI model and may not always be accurate. Use it as a general guideline.</em>
140133
</p>
141134
</DialogContent>
142135
</Dialog>

src/components/ui/label.tsx

Lines changed: 0 additions & 26 deletions
This file was deleted.

src/components/ui/progress.tsx

Lines changed: 0 additions & 28 deletions
This file was deleted.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy