from typing import Type

from pydantic import BaseModel, Field

from app.core.tools.base_tool import BaseTool
from config.llm import tool_settings
from sqlalchemy.orm import Session
from app.models.run import Run
from app.services.file.file import FileService


class FileContnetTool(BaseTool):
    name: str = "file_content"
    description: str = (
        "读取文件的所有或者全部内容并返回给用户,这里每一次只允许触发一次"
        "只有提到读取全部内容的时候才会返回全部内容,其他时候这个工具不会调用"
        "和file_search工具不会同时使用,用了此工具就不会调用file_search"
    )

    file_ids: list[str] = []
    args_schema: Type[BaseModel] = {}

    def configure(self, session: Session, run: Run, **kwargs):
        if run.file_ids is not None and len(run.file_ids) > 0:
            self.file_ids = run.file_ids

    def run(self) -> dict:
        return FileService.retrieve_documents(ids=self.file_ids)
