~ | improve Vercel & g4f.Completion.create

added `.Completion.create` class.

```py
response = g4f.Completion.create(
    model='text-davinci-003', prompt="Hello")

print(response)
```
This commit is contained in:
abc 2023-09-23 11:16:19 +01:00
parent af9fc19938
commit 6c2e3cc53c
2 changed files with 33 additions and 2 deletions

View File

@ -48,9 +48,11 @@ class Vercel(BaseProvider):
'playgroundId': str(uuid.uuid4()),
'chatIndex' : 0} | model_info[model]['default_params']
server_error = True
while server_error:
retries = 0
max_retries = kwargs.get('max_retries', 20)
while server_error and not retries > max_retries:
response = requests.post('https://sdk.vercel.ai/api/generate',
headers=headers, json=json_data, stream=True)
@ -58,6 +60,8 @@ class Vercel(BaseProvider):
if token != b'Internal Server Error':
server_error = False
yield (token.decode())
retries += 1
def AntiBotToken() -> str:
headers = {

View File

@ -68,3 +68,30 @@ class ChatCompletion:
raise Exception(f"Provider: {provider.__name__} doesn't support create_async")
return await provider.create_async(model.name, messages, **kwargs)
class Completion:
@staticmethod
def create(
model : Union[models.Model, str],
prompt : str,
provider : Union[type[BaseProvider], None] = None,
stream : bool = False, **kwargs) -> Union[CreateResult, str]:
allowed_models = [
'code-davinci-002',
'text-ada-001',
'text-babbage-001',
'text-curie-001',
'text-davinci-002',
'text-davinci-003'
]
if model not in allowed_models:
raise Exception(f'ValueError: Can\'t use {model} with Completion.create()')
model, provider = get_model_and_provider(model, provider, stream)
result = provider.create_completion(model.name,
[{"role": "user", "content": prompt}], stream, **kwargs)
return result if stream else ''.join(result)