knowledgeBaseService.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import { apiClient } from './apiClient';
  2. import { KnowledgeFile } from '../types';
  3. export const knowledgeBaseService = {
  4. async getAll(authToken: string): Promise<KnowledgeFile[]> {
  5. const response = await apiClient.request('/knowledge-bases', {});
  6. if (!response.ok) {
  7. throw new Error('Failed to fetch knowledge base files');
  8. }
  9. const data = await response.json();
  10. // バックエンドエンティティをフロントエンドの KnowledgeFile にマッピング
  11. return data.map((item: any) => {
  12. return {
  13. id: item.id,
  14. name: item.originalName,
  15. type: item.mimetype,
  16. size: item.size,
  17. uploadDate: new Date(item.createdAt).getTime(),
  18. status: item.status, // Pass raw status from backend
  19. content: '', // Frontend doesn't need content
  20. groups: item.groups || [], // Add group info
  21. indexingConfig: {
  22. chunkSize: item.chunkSize || 1000,
  23. chunkOverlap: item.chunkOverlap || 200,
  24. embeddingModelId: item.embeddingModelId || ''
  25. }
  26. };
  27. });
  28. },
  29. async clearAll(authToken: string): Promise<void> {
  30. const response = await apiClient.request('/knowledge-bases/clear', {
  31. method: 'DELETE',
  32. });
  33. if (!response.ok) {
  34. throw new Error('Failed to clear knowledge base');
  35. }
  36. },
  37. async search(query: string, topK: number = 5, authToken: string): Promise<any> {
  38. const response = await apiClient.request('/knowledge-bases/search', {
  39. method: 'POST',
  40. headers: {
  41. 'Content-Type': 'application/json',
  42. },
  43. body: JSON.stringify({ query, topK }),
  44. });
  45. if (!response.ok) {
  46. throw new Error('Failed to search knowledge base');
  47. }
  48. return response.json();
  49. },
  50. async deleteFile(fileId: string, authToken: string): Promise<void> {
  51. const response = await apiClient.request(`/knowledge-bases/${fileId}`, {
  52. method: 'DELETE',
  53. });
  54. if (!response.ok) {
  55. throw new Error('Failed to delete file');
  56. }
  57. },
  58. async retryFile(fileId: string, authToken: string): Promise<KnowledgeFile> {
  59. const response = await apiClient.request(`/knowledge-bases/${fileId}/retry`, {
  60. method: 'POST',
  61. });
  62. if (!response.ok) {
  63. throw new Error('Failed to retry file');
  64. }
  65. const item = await response.json();
  66. return {
  67. id: item.id,
  68. name: item.originalName,
  69. type: item.mimetype,
  70. size: item.size,
  71. uploadDate: new Date(item.createdAt).getTime(),
  72. status: item.status,
  73. content: '',
  74. groups: item.groups || [],
  75. indexingConfig: {
  76. chunkSize: item.chunkSize || 1000,
  77. chunkOverlap: item.chunkOverlap || 200,
  78. embeddingModelId: item.embeddingModelId || ''
  79. }
  80. };
  81. },
  82. async getFileChunks(fileId: string, authToken: string) {
  83. const response = await apiClient.request(`/knowledge-bases/${fileId}/chunks`, {});
  84. if (!response.ok) {
  85. throw new Error('Failed to get file chunks');
  86. }
  87. return response.json();
  88. },
  89. getPageImageUrl(fileId: string, pageIndex: number): string {
  90. return `/api/knowledge-bases/${fileId}/page/${pageIndex}`;
  91. },
  92. };