def search_scene()

in movie_search/final_ver/backend/scene_search.py [0:0]


def search_scene(query: str, top_n: int = 1, model: GenerativeModel = model_flash) -> List[dict]:
    """シーン検索を実行する

    Args:
        query: 検索クエリ
        top_n: 検索対象とする動画の数
        model: 利用する Gemini モデル

    Returns:
        検索結果のリスト
    """
    response = search_documents_by_query(query, show_summary=False)
    storage_client = storage.Client()
    results = []

    for doc_id in range(min(top_n, len(response.results))):
        # Discovery Engine の検索結果から、動画メタデータの URI とタイトルを取得
        meta_uri = response.results[doc_id].document.derived_struct_data['link']
        title = response.results[doc_id].document.derived_struct_data['title']
        print(f'meta_uri: {meta_uri}')

        # URI からバケット名と blob 名を取得
        bucket_name = meta_uri.split("//")[1].split("/", 1)[0]
        metadata_blob_name = meta_uri.split("//")[1].split("/", 1)[1]
        movie_blob_name = metadata_url_to_movie_blob_name(meta_uri)
        
        # Cloud Storage からメタデータを取得
        bucket = storage_client.bucket(bucket_name)
        blob = bucket.blob(metadata_blob_name)

        # download_to_filename を使わずに、blob から直接テキストデータを読み込む
        metatext = blob.download_as_text()

        prompt = PROMPT_CONTENT_SEARCH.format(query=query, metatext=metatext)
        temperature = 0.4
        result = None
        while temperature < 1.0:
            try:
                print(f'movie_blob_name: {movie_blob_name}')
                signed_url = generate_download_signed_url_v4(bucket_name, movie_blob_name)

                # generate_text から直接結果リストを取得              
                result = generate_text(prompt, model=model, temperature=temperature)

                # 結果に signed_url と title を追加
                for r in result:
                    r['signed_url'] = signed_url
                    r['title'] = title
                results.extend(result)
                break

            except Exception as e:
                print(e)
                temperature += 0.05

        if temperature < 1.0:
            print('\n=====')
            
    return results