{"version":3,"file":"xxmachina-components-services-thread.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/services/thread/thread.service.ts","../../../../../packages/@xxmachina/components/src/lib/services/thread/xxmachina-components-services-thread.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { message } from '@nx-ddd/common';\nimport { NEVER, Observable, ReplaySubject, catchError, interval, lastValueFrom, map, startWith, switchMap, takeUntil } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class ThreadService {\n  readonly http = inject(HttpClient);\n\n  \n\n  getThread(id: string) {\n    return this.http.get(`/api/threads/${id}`);\n  }\n\n  create() {\n    return lastValueFrom(this.http.post<{id: string}>('/api/threads', {}));\n  }\n\n  listMessages(threadId: string) {\n    return this.http.get<any[]>(`/api/threads/${threadId}/messages`);\n  }\n\n  createMessage(message: {threadId: string, role: 'user', content: string}) {\n    return lastValueFrom(this.http.post(`/api/threads/${message.threadId}/messages`, message));\n  }\n\n  run(assistantId: string, threadId: string) {\n    return lastValueFrom(this.http.post<{id: string}>(`/api/threads/${threadId}/runs`, {\n      assistantId,\n      instructions: message``,\n      tools: [],\n    }));\n  }\n\n  submitToolOutputs(threadId: string, runId: string, toolOutputs: any[]) {\n    return lastValueFrom(this.http.post<any>(`/api/threads/${threadId}/runs/${runId}/submit_tool_outputs`, {\n      toolOutputs,\n    }));\n  }\n\n  retrieveRun(threadId: string, runId: string) {\n    return lastValueFrom(this.http.get<any>(`/api/threads/${threadId}/runs/${runId}`));\n  }\n\n  retrieveRunSteps(threadId: string, runId: string) {\n    return this.http.get<any>(`/api/threads/${threadId}/runs/${runId}/steps`);\n  }\n\n  observeSteps(threadId: string, runId: string): Observable<'dealing' | 'message_creating' | 'function_calling' | 'done'> {\n    const stop$ = new ReplaySubject<void>();\n    return interval(1000).pipe(\n      startWith(null),\n      takeUntil(stop$),\n      switchMap(() => this.retrieveRunSteps(threadId, runId).pipe(\n        catchError((error) => (console.error(error), NEVER)),\n      )),\n      map(steps => {\n        if (steps.some((step: any) => step.status === 'in_progress')) {\n          const inProgress = steps.find((step: any) => step.status === 'in_progress');\n          switch (inProgress.type) {\n            case 'message_creation': return 'message_creating';\n            default: return 'function_calling'\n          }\n        }\n\n        if (steps.find((step: any) => step.type === 'message_creation')?.status === 'completed') {\n          stop$.next();\n          return 'done';\n        }\n        return 'dealing';\n  \n      })\n    );\n  }\n\n  async watchSteps(\n    threadId: string,\n    runId: string,\n    onStatusChanged: (status: string) => void,\n  ) {\n    while (true) {\n      const steps = await lastValueFrom(this.retrieveRunSteps(threadId, runId));\n      console.debug('steps:', steps);\n      if (steps.some((step: any) => step.status === 'in_progress')) {\n        const inProgress = steps.find((step: any) => step.status === 'in_progress');\n        switch (inProgress.type) {\n          case 'message_creation': {\n            onStatusChanged('message_creating');\n            break;\n          }\n          default: {\n            onStatusChanged('function_calling');\n            break;\n          }\n        }\n      }\n\n      onStatusChanged('dealing');\n\n      if (steps.find((step: any) => step.type === 'message_creation')?.status === 'completed') {\n        onStatusChanged('done');\n        break;\n      }\n\n      await new Promise(resolve => setTimeout(resolve, 1000));\n    }\n  }\n\n  async watch(\n    threadId: string,\n    runId: string,\n    onFunctionCalled: (toolCall: any) => Promise<object> | object,\n    onCompleted: () => void,\n    onError: (error: any) => void,\n  ) {\n    while (true) {\n      const run = await this.retrieveRun(threadId, runId);\n      switch (run.status) {\n        case 'requires_action': {\n          try {\n            const toolCalls = run.required_action.submit_tool_outputs.tool_calls;\n            const result = await onFunctionCalled(toolCalls[0]);\n            this.submitToolOutputs(threadId, runId, [{ toolCallId: toolCalls[0].id, output: JSON.stringify(result) }]);\n          } catch (error) {\n            onError(error);\n            // this.snackBar.open('エラーが発生しました。更新して再度、お試しください。');\n          }\n        }\n        case 'completed': {\n          console.debug(`run ${runId} completed`);\n          onCompleted();\n          // this$.next();\n          return;\n        }\n        case 'failed': {\n          console.debug(`run ${runId} failed`);\n          return;\n        }\n      }\n      await new Promise(resolve => setTimeout(resolve, 1000));\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}