|
1 | 1 | from __future__ import absolute_import, division, print_function
|
2 | 2 |
|
| 3 | +import json |
| 4 | +import os |
| 5 | + |
3 | 6 | import openai
|
4 | 7 | from openai import api_requestor, util
|
5 | 8 | from openai.api_resources.abstract import (
|
@@ -29,3 +32,59 @@ def create(
|
29 | 32 | return util.convert_to_openai_object(
|
30 | 33 | response, api_key, api_version, organization
|
31 | 34 | )
|
| 35 | + |
| 36 | + @classmethod |
| 37 | + def download( |
| 38 | + cls, id, api_key=None, api_base=None, api_version=None, organization=None |
| 39 | + ): |
| 40 | + requestor = api_requestor.APIRequestor( |
| 41 | + api_key, |
| 42 | + api_base=api_base or openai.file_api_base or openai.api_base, |
| 43 | + api_version=api_version, |
| 44 | + organization=organization, |
| 45 | + ) |
| 46 | + url = f"{cls.class_url()}/{id}/content" |
| 47 | + rbody, rcode, rheaders, _, _ = requestor.request_raw("get", url) |
| 48 | + if not 200 <= rcode < 300: |
| 49 | + raise requestor.handle_error_response( |
| 50 | + rbody, rcode, json.loads(rbody), rheaders, stream_error=False |
| 51 | + ) |
| 52 | + return rbody |
| 53 | + |
| 54 | + @classmethod |
| 55 | + def find_matching_files( |
| 56 | + cls, |
| 57 | + api_key=None, |
| 58 | + api_base=None, |
| 59 | + api_version=None, |
| 60 | + organization=None, |
| 61 | + file=None, |
| 62 | + purpose=None, |
| 63 | + ): |
| 64 | + if file is None: |
| 65 | + raise openai.error.InvalidRequestError( |
| 66 | + "'file' is a required property", "file" |
| 67 | + ) |
| 68 | + if purpose is None: |
| 69 | + raise openai.error.InvalidRequestError( |
| 70 | + "'purpose' is a required property", "purpose" |
| 71 | + ) |
| 72 | + all_files = cls.list( |
| 73 | + api_key=api_key, |
| 74 | + api_base=api_base or openai.file_api_base or openai.api_base, |
| 75 | + api_version=api_version, |
| 76 | + organization=organization, |
| 77 | + ).get("data", []) |
| 78 | + matching_files = [] |
| 79 | + for f in all_files: |
| 80 | + if f["purpose"] != purpose: |
| 81 | + continue |
| 82 | + if not hasattr(file, "name") or f["filename"] != file.name: |
| 83 | + continue |
| 84 | + file.seek(0, os.SEEK_END) |
| 85 | + if f["bytes"] != file.tell(): |
| 86 | + file.seek(0) |
| 87 | + continue |
| 88 | + file.seek(0) |
| 89 | + matching_files.append(f) |
| 90 | + return matching_files |
0 commit comments