mirror of
https://github.com/meta-llama/llama-stack.git
synced 2025-12-17 16:32:38 +00:00
consolidate ResourceNotFoundError sites, fix plurality
This commit is contained in:
parent
639e3f4570
commit
3fceb28a39
1 changed files with 19 additions and 35 deletions
|
|
@ -66,6 +66,18 @@ class LocalfsFilesImpl(Files):
|
||||||
"""Get the filesystem path for a file ID."""
|
"""Get the filesystem path for a file ID."""
|
||||||
return Path(self.config.storage_dir) / file_id
|
return Path(self.config.storage_dir) / file_id
|
||||||
|
|
||||||
|
async def _lookup_file_id(self, file_id: str) -> tuple[OpenAIFileObject, Path]:
|
||||||
|
"""Look up a OpenAIFileObject and filesystem path from its ID."""
|
||||||
|
if not self.sql_store:
|
||||||
|
raise RuntimeError("Files provider not initialized")
|
||||||
|
|
||||||
|
row = await self.sql_store.fetch_one("openai_files", policy=self.policy, where={"id": file_id})
|
||||||
|
if not row:
|
||||||
|
raise ResourceNotFoundError(file_id, "File", "client.files.list()")
|
||||||
|
|
||||||
|
file_path = Path(row.pop("file_path"))
|
||||||
|
return OpenAIFileObject(**row), file_path
|
||||||
|
|
||||||
# OpenAI Files API Implementation
|
# OpenAI Files API Implementation
|
||||||
async def openai_upload_file(
|
async def openai_upload_file(
|
||||||
self,
|
self,
|
||||||
|
|
@ -158,37 +170,19 @@ class LocalfsFilesImpl(Files):
|
||||||
|
|
||||||
async def openai_retrieve_file(self, file_id: str) -> OpenAIFileObject:
|
async def openai_retrieve_file(self, file_id: str) -> OpenAIFileObject:
|
||||||
"""Returns information about a specific file."""
|
"""Returns information about a specific file."""
|
||||||
if not self.sql_store:
|
file_obj, _ = await self._lookup_file_id(file_id)
|
||||||
raise RuntimeError("Files provider not initialized")
|
|
||||||
|
|
||||||
row = await self.sql_store.fetch_one("openai_files", policy=self.policy, where={"id": file_id})
|
return file_obj
|
||||||
if not row:
|
|
||||||
raise ResourceNotFoundError(file_id, "files", "files.list()")
|
|
||||||
|
|
||||||
return OpenAIFileObject(
|
|
||||||
id=row["id"],
|
|
||||||
filename=row["filename"],
|
|
||||||
purpose=OpenAIFilePurpose(row["purpose"]),
|
|
||||||
bytes=row["bytes"],
|
|
||||||
created_at=row["created_at"],
|
|
||||||
expires_at=row["expires_at"],
|
|
||||||
)
|
|
||||||
|
|
||||||
async def openai_delete_file(self, file_id: str) -> OpenAIFileDeleteResponse:
|
async def openai_delete_file(self, file_id: str) -> OpenAIFileDeleteResponse:
|
||||||
"""Delete a file."""
|
"""Delete a file."""
|
||||||
if not self.sql_store:
|
|
||||||
raise RuntimeError("Files provider not initialized")
|
|
||||||
|
|
||||||
row = await self.sql_store.fetch_one("openai_files", policy=self.policy, where={"id": file_id})
|
|
||||||
if not row:
|
|
||||||
raise ResourceNotFoundError(file_id, "files", "files.list()")
|
|
||||||
|
|
||||||
# Delete physical file
|
# Delete physical file
|
||||||
file_path = Path(row["file_path"])
|
_, file_path = await self._lookup_file_id(file_id)
|
||||||
if file_path.exists():
|
if file_path.exists():
|
||||||
file_path.unlink()
|
file_path.unlink()
|
||||||
|
|
||||||
# Delete metadata from database
|
# Delete metadata from database
|
||||||
|
assert self.sql_store is not None, "Files provider not initialized"
|
||||||
await self.sql_store.delete("openai_files", where={"id": file_id})
|
await self.sql_store.delete("openai_files", where={"id": file_id})
|
||||||
|
|
||||||
return OpenAIFileDeleteResponse(
|
return OpenAIFileDeleteResponse(
|
||||||
|
|
@ -198,25 +192,15 @@ class LocalfsFilesImpl(Files):
|
||||||
|
|
||||||
async def openai_retrieve_file_content(self, file_id: str) -> Response:
|
async def openai_retrieve_file_content(self, file_id: str) -> Response:
|
||||||
"""Returns the contents of the specified file."""
|
"""Returns the contents of the specified file."""
|
||||||
if not self.sql_store:
|
|
||||||
raise RuntimeError("Files provider not initialized")
|
|
||||||
|
|
||||||
# Get file metadata
|
|
||||||
row = await self.sql_store.fetch_one("openai_files", policy=self.policy, where={"id": file_id})
|
|
||||||
if not row:
|
|
||||||
raise ResourceNotFoundError(file_id, "files", "files.list()")
|
|
||||||
|
|
||||||
# Read file content
|
# Read file content
|
||||||
file_path = Path(row["file_path"])
|
file_obj, file_path = await self._lookup_file_id(file_id)
|
||||||
if not file_path.exists():
|
|
||||||
raise ResourceNotFoundError(file_id, "files content", "files.list()")
|
|
||||||
|
|
||||||
with open(file_path, "rb") as f:
|
with open(file_path, "rb") as f: # this may fail and result in 500 Internal Server Error
|
||||||
content = f.read()
|
content = f.read()
|
||||||
|
|
||||||
# Return as binary response with appropriate content type
|
# Return as binary response with appropriate content type
|
||||||
return Response(
|
return Response(
|
||||||
content=content,
|
content=content,
|
||||||
media_type="application/octet-stream",
|
media_type="application/octet-stream",
|
||||||
headers={"Content-Disposition": f'attachment; filename="{row["filename"]}"'},
|
headers={"Content-Disposition": f'attachment; filename="{file_obj.filename}"'},
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue