Skip to content

Commit 90eeae8

Browse files
zcuderchen zhang
andauthored
fix cached wiki doesn't load repo info and model info (#202)
Co-authored-by: chen zhang <[email protected]>
1 parent 7bb7730 commit 90eeae8

File tree

3 files changed

+47
-29
lines changed

3 files changed

+47
-29
lines changed

api/api.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,15 @@ class ProcessedProjectEntry(BaseModel):
5757
submittedAt: int # Timestamp
5858
language: str # Extracted from filename
5959

60+
class RepoInfo(BaseModel):
61+
owner: str
62+
repo: str
63+
type: str
64+
token: Optional[str] = None
65+
localPath: Optional[str] = None
66+
repoUrl: Optional[str] = None
67+
68+
6069
class WikiStructureModel(BaseModel):
6170
"""
6271
Model for the overall wiki structure.
@@ -72,19 +81,20 @@ class WikiCacheData(BaseModel):
7281
"""
7382
wiki_structure: WikiStructureModel
7483
generated_pages: Dict[str, WikiPage]
75-
repo_url: Optional[str] = None # Add repo_url to cache
84+
repo: RepoInfo
85+
provider: str
86+
model: str
7687

7788
class WikiCacheRequest(BaseModel):
7889
"""
7990
Model for the request body when saving wiki cache.
8091
"""
81-
owner: str
82-
repo: str
83-
repo_type: str
92+
repo: RepoInfo
8493
language: str
8594
wiki_structure: WikiStructureModel
8695
generated_pages: Dict[str, WikiPage]
87-
repo_url: Optional[str] = None # Add repo_url to cache request
96+
provider: str
97+
model: str
8898

8999
class WikiExportRequest(BaseModel):
90100
"""
@@ -402,13 +412,15 @@ async def read_wiki_cache(owner: str, repo: str, repo_type: str, language: str)
402412

403413
async def save_wiki_cache(data: WikiCacheRequest) -> bool:
404414
"""Saves wiki cache data to the file system."""
405-
cache_path = get_wiki_cache_path(data.owner, data.repo, data.repo_type, data.language)
415+
cache_path = get_wiki_cache_path(data.repo.owner, data.repo.repo, data.repo.type, data.language)
406416
logger.info(f"Attempting to save wiki cache. Path: {cache_path}")
407417
try:
408418
payload = WikiCacheData(
409419
wiki_structure=data.wiki_structure,
410420
generated_pages=data.generated_pages,
411-
repo_url=data.repo_url
421+
repo=data.repo,
422+
provider=data.provider,
423+
model=data.model
412424
)
413425
# Log size of data to be cached for debugging (avoid logging full content if large)
414426
try:
@@ -469,7 +481,7 @@ async def store_wiki_cache(request_data: WikiCacheRequest):
469481
if not supported_langs.__contains__(request_data.language):
470482
request_data.language = configs["lang_config"]["default"]
471483

472-
logger.info(f"Attempting to save wiki cache for {request_data.owner}/{request_data.repo} ({request_data.repo_type}), lang: {request_data.language}")
484+
logger.info(f"Attempting to save wiki cache for {request_data.repo.owner}/{request_data.repo.repo} ({request_data.repo.type}), lang: {request_data.language}")
473485
success = await save_wiki_cache(request_data)
474486
if success:
475487
return {"message": "Wiki cache saved successfully"}

src/app/[owner]/[repo]/page.tsx

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1522,13 +1522,10 @@ IMPORTANT:
15221522
if (cachedData && cachedData.wiki_structure && cachedData.generated_pages && Object.keys(cachedData.generated_pages).length > 0) {
15231523
console.log('Using server-cached wiki data');
15241524

1525-
// Update repoInfo with cached repo_url if not provided in URL
1526-
let updatedRepoInfo = effectiveRepoInfo;
1527-
if (cachedData.repo_url && !effectiveRepoInfo.repoUrl) {
1528-
updatedRepoInfo = { ...effectiveRepoInfo, repoUrl: cachedData.repo_url };
1529-
setEffectiveRepoInfo(updatedRepoInfo); // Update effective repo info state
1530-
console.log('Using cached repo_url:', cachedData.repo_url);
1531-
}
1525+
setSelectedModelState(cachedData.model);
1526+
setSelectedProviderState(cachedData.provider);
1527+
// Update repoInfo
1528+
setEffectiveRepoInfo(cachedData.repo);
15321529

15331530
// Ensure the cached structure has sections and rootSections
15341531
const cachedStructure = {
@@ -1703,16 +1700,14 @@ IMPORTANT:
17031700
sections: wikiStructure.sections || [],
17041701
rootSections: wikiStructure.rootSections || []
17051702
};
1706-
17071703
const dataToCache = {
1708-
owner: effectiveRepoInfo.owner,
1709-
repo: effectiveRepoInfo.repo,
1710-
repo_type: effectiveRepoInfo.type,
1704+
repo: effectiveRepoInfo,
17111705
language: language,
17121706
comprehensive: isComprehensiveView,
17131707
wiki_structure: structureToCache,
17141708
generated_pages: generatedPages,
1715-
repo_url: effectiveRepoInfo.repoUrl || repoUrl || undefined // Include repo_url in cache
1709+
provider: selectedProviderState,
1710+
model: selectedModelState
17161711
};
17171712
const response = await fetch(`/api/wiki_cache`, {
17181713
method: 'POST',

src/components/Ask.tsx

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ const Ask: React.FC<AskProps> = ({
7676
const [researchComplete, setResearchComplete] = useState(false);
7777
const inputRef = useRef<HTMLInputElement>(null);
7878
const responseRef = useRef<HTMLDivElement>(null);
79+
const providerRef = useRef(provider);
80+
const modelRef = useRef(model);
7981

8082
// Focus input on component mount
8183
useEffect(() => {
@@ -106,34 +108,43 @@ const Ask: React.FC<AskProps> = ({
106108
}, []);
107109

108110
useEffect(() => {
109-
const fetchDefaultModel = async () => {
111+
providerRef.current = provider;
112+
modelRef.current = model;
113+
}, [provider, model]);
114+
115+
useEffect(() => {
116+
const fetchModel = async () => {
110117
try {
111118
setIsLoading(true);
112119

113120
const response = await fetch('/api/models/config');
114-
115121
if (!response.ok) {
116122
throw new Error(`Error fetching model configurations: ${response.status}`);
117123
}
118124

119125
const data = await response.json();
120126

121-
setSelectedProvider(data.defaultProvider);
127+
// use latest provider/model ref to check
128+
if(providerRef.current == '' || modelRef.current== '') {
129+
setSelectedProvider(data.defaultProvider);
122130

123-
// Find the default provider and set its default model
124-
const selectedProvider = data.providers.find((p:Provider) => p.id === data.defaultProvider);
125-
if (selectedProvider && selectedProvider.models.length > 0) {
126-
setSelectedModel(selectedProvider.models[0].id);
131+
// Find the default provider and set its default model
132+
const selectedProvider = data.providers.find((p:Provider) => p.id === data.defaultProvider);
133+
if (selectedProvider && selectedProvider.models.length > 0) {
134+
setSelectedModel(selectedProvider.models[0].id);
135+
}
136+
} else {
137+
setSelectedProvider(providerRef.current);
138+
setSelectedModel(modelRef.current);
127139
}
128140
} catch (err) {
129141
console.error('Failed to fetch model configurations:', err);
130142
} finally {
131143
setIsLoading(false);
132144
}
133145
};
134-
135146
if(provider == '' || model == '') {
136-
fetchDefaultModel()
147+
fetchModel()
137148
}
138149
}, [provider, model]);
139150

0 commit comments

Comments
 (0)