The JinaAI Python SDK is an efficient instrument that smoothly brings the power of JinaAI's products — SceneXplain, PromptPerfect, Rationale, BestBanner, and JinaChat — into Python applications. Acting as a sturdy interface for JinaAI's APIs, this SDK lets you effortlessly formulate and fine-tune prompts, thus streamlining application development.
Using pip:
To generate an API secret, you need to authenticate on each respective platform's API tab:
Note: Each secret is product-specific and cannot be interchanged. If you're planning to use multiple products, you'll need to generate a separate secret for each.
Import the SDK and instantiate a new client with your authentication secrets:
from jinaai import JinaAI
jinaai = JinaAI(
secrets = {
'promptperfect-secret': 'XXXXXX',
'scenex-secret': 'XXXXXX',
'rationale-secret': 'XXXXXX',
'jinachat-secret': 'XXXXXX',
'bestbanner-secret': 'XXXXXX',
}
)
Describe images:
descriptions = jinaai.describe(
'https://picsum.photos/200'
)
Evaluate situations:
decisions = jinaai.decide(
'Going to Paris this summer',
{ 'analysis': 'proscons' }
)
Optimize prompts:
prompts = jinaai.optimize(
'Write an Hello World function in Python'
)
Generate complex answers:
output = jinaai.generate(
'Give me a recipe for a pizza with pineapple'
)
Create images from text:
output = jinaai.imagine(
'A controversial fusion of sweet pineapple and savory pizza.'
)
Use APIs together:
situations = [toBase64(img) for img in [
'factory-1.png',
'factory-2.png',
'factory-3.png',
'factory-4.png',
]]
descriptions = jinaai.describe(situations)
prompt1 = [
'Do any of those situations present a danger?',
'Reply with [YES] or [NO] and explain why',
*['SITUATION:\n' + desc['output'] for i, desc in enumerate(descriptions['results'])]
]
analysis = jinaai.generate('\n'.join(prompt1))
prompt2 = [
'What should be done first to make those situations safer?',
'I only want the most urgent situation',
*['SITUATION:\n' + desc['output'] for i, desc in enumerate(descriptions['results'])]
]
recommendation = jinaai.generate('\n'.join(propmt2))
swot = jinaai.decide(
recommendation['output'],
{ 'analysis': 'swot' }
)
banners = jinaai.imagine(
*[desc['output'] for i, desc in enumerate(descriptions['results'])]
)
You can retrieve the raw output of each APIs by passing raw: True in the options:
descriptions = jinaai.describe(
'https://picsum.photos/200',
{ 'raw': True }
)
print(descriptions['raw'])
Custom base Urls can be passed directly in the client's constructor:
jinaai = JinaAI(
baseUrls={
'promptperfect': 'https://promptperfect-customurl.jina.ai',
'scenex': 'https://scenex-customurl.jina.ai',
'rationale': 'https://rationale-customurl.jina.ai',
'jinachat': 'https://jinachat-customurl.jina.ai',
'bestbanner': 'https://bestbanner-customurl.jina.ai',
}
)
output = JinaAI.describe(input, options)
| VARIABLE |
TYPE |
VALUE |
| input |
str / str array |
Image URL or Base64 |
| VARIABLE |
TYPE |
VALUE |
| options |
dict |
|
| options['algorithm'] |
None / str |
Aqua / Bolt / Comet / Dune / Ember / Flash / Glide / Hearth / Inception / Jelly |
| options['features'] |
None / str array |
high_quality, question_answer, tts, opt-out, json |
| options['languages'] |
None / str array |
en, cn, de, fr, it... |
| options['question'] |
None / str |
Question related to the picture(s) |
| options['style'] |
None / str |
default / concise / prompt |
| options['output_length'] |
None / number |
|
| options['json_schema'] |
None / dict |
|
| options['callback_url'] |
None / string |
|
| VARIABLE |
TYPE |
VALUE |
| output |
dict |
|
| output['results'] |
dict array |
|
| results[0]['output'] |
str |
The picture description |
| results[0]['i18n'] |
dict |
Contains one key for each item in languages |
| ...i18n['cn'] |
str |
The translated picture description |
| ...i18n['cn'] |
dict array |
Only for Hearth algorithm |
| ...i18n['cn'][0] |
dict |
|
| ...i18n['cn'][0]['message'] |
str |
|
| ...i18n['cn'][0]['isNarrator'] |
boolean |
|
| ...i18n['cn'][0]['name'] |
str |
|
| ...i18n['cn'] |
dict array |
Only for Inception algorithm |
| ...i18n['cn'][0] |
dict |
|
| ...i18n['cn'][0]['summary'] |
str |
|
| ...i18n['cn'][0]['events'] |
dict array |
|
| ...['events']['description'] |
str |
|
| ...['events']['timestamp'] |
str |
|
| results[0]['tts'] |
dict |
Only for Hearth algorithm |
| ...tts['cn'] |
str |
Contains the url to the tts file |
| results[0]['ssml'] |
dict |
Only for Hearth algorithm |
| ...ssml['cn'] |
str |
Contains the url to the ssml file |
output = JinaAI.optimize(input, options)
| VARIABLE |
TYPE |
VALUE |
| input |
str / str array |
Image URL or Base64 / prompt to optimize |
| VARIABLE |
TYPE |
VALUE |
| options |
dict |
|
| options['targetModel'] |
None / str |
chatgpt / gpt-4 / stablelm-tuned-alpha-7b / claude / cogenerate / text-davinci-003 / dalle / sd / midjourney / kandinsky / lexica |
| options['features'] |
None / str array |
preview, no_spam, shorten, bypass_ethics, same_language, always_en, high_quality, redo_original_image, variable_subs, template_run |
| options['iterations'] |
None / number |
Default: 1 |
| options['previewSettings'] |
None / dict |
Contains the settings for the preview |
| ...previewSettings['temperature'] |
number |
Example: 0.9 |
| ...previewSettings['topP'] |
number |
Example: 0.9 |
| ...previewSettings['topK'] |
number |
Example: 0 |
| ...previewSettings['frequencyPenalty'] |
number |
Example: 0 |
| ...previewSettings['presencePenalty'] |
number |
Example: 0 |
| options['previewVariables'] |
None / dict |
Contains one key for each variables in the prompt |
| ...previewVariables['var1'] |
str |
The value of the variable |
| options['timeout'] |
Number |
Default: 20000 |
| options['target_language'] |
None / str |
en / cn / de / fr / it... |
| VARIABLE |
TYPE |
VALUE |
| output |
dict |
|
| output['results'] |
dict array |
|
| results[0]['output'] |
str |
The optimized prompt |
output = JinaAI.decide(input, options)
| VARIABLE |
TYPE |
VALUE |
| input |
str / str array |
Decision to evaluate |
| VARIABLE |
TYPE |
VALUE |
| options |
dict |
|
| options['analysis'] |
None / str |
proscons / swot / multichoice / outcomes |
| options['style'] |
None / str |
concise / professional / humor / sarcastic / childish / genZ |
| options['profileId'] |
None / str |
The id of the Personas you want to use |
| VARIABLE |
TYPE |
VALUE |
| output |
dict |
|
| output['results'] |
dict array |
|
| results[0]['proscons'] |
None / dict |
|
| ...proscons['pros'] |
dict |
Contains one key for each pros |
| ...proscons['pros']['pros1'] |
str |
The explanation of the pros |
| ...proscons['cons'] |
dict |
Contains one key for each cons |
| ...proscons['cons']['cons1'] |
str |
The explanation of the cons |
| ...proscons['bestChoice'] |
str |
|
| ...proscons['conclusion'] |
str |
|
| ...proscons['confidenceScore'] |
number |
|
| results[0]['swot'] |
None / dict |
|
| ...swot['strengths'] |
dict |
Contains one key for each strength |
| ...swot['strengths']['str1'] |
str |
The explanation of the strength |
| ...swot['weaknesses'] |
dict |
Contains one key for each weakness |
| ...swot['weaknesses']['weak1'] |
str |
The explanation of the weakness |
| ...swot['opportunities'] |
dict |
Contains one key for each opportunity |
| ...swot['opportunities']['opp1'] |
str |
The explanation of the opportunity |
| ...swot['threats'] |
dict |
Contains one key for each threat |
| ...swot['threats']['thre1'] |
str |
The explanation of the threat |
| ...swot['bestChoice'] |
str |
|
| ...swot['conclusion'] |
str |
|
| ...swot['confidenceScore'] |
number |
|
| results[0]['multichoice'] |
None / dict |
Contains one key for each choice |
| ...multichoice['choice1'] |
str |
The value of the choice |
| results[0]['outcomes'] |
None / dict array |
|
| ...outcomes[0]['children'] |
None / dict array |
a recursive array of results['outcomes'] |
| ...outcomes[0]['label'] |
str |
|
| ...outcomes[0]['sentiment'] |
str |
|
output = JinaAI.generate(input, options)
| VARIABLE |
TYPE |
VALUE |
| input |
str / str array |
Image URL or Base64 / prompt |
| VARIABLE |
TYPE |
VALUE |
| options |
dict |
|
| options['role'] |
None / str |
user / assistant |
| options['name'] |
None / str |
The name of the author of this message |
| options['chatId'] |
None / str |
The id of the conversation to continue |
| options['stream'] |
None / boolean |
Whether to stream back partial progress, Default: false |
| options['temperature'] |
None / number |
Default: 1 |
| options['top_p'] |
None / str |
Default: 1 |
| options['stop'] |
None / str / str array |
Up to 4 sequences where the API will stop generating further tokens |
| options['max_tokens'] |
None / number |
Default: infinite |
| options['presence_penalty'] |
None / number |
Number between -2.0 and 2.0, Default: 0 |
| options['frequency_penalty'] |
None / number |
Number between -2.0 and 2.0, Default: 0 |
| options['logit_bias'] |
None / dict |
The likelihood for a token to appear in the completion |
| ...logit_bias['tokenId'] |
number |
Bias value from -100 to 100 |
| options['image'] |
str |
The attached image of the message. The image can be either a URL or a base64-encoded string |
| VARIABLE |
TYPE |
VALUE |
| output |
dict |
|
| output['output'] |
str |
The generated answer |
| output['chatId'] |
str |
The chatId to continue the conversation |
output = JinaAI.imagine(input, options)
| VARIABLE |
TYPE |
VALUE |
| input |
str / str array |
Prompt |
| VARIABLE |
TYPE |
VALUE |
| options |
dict |
|
| options['style'] |
None / str |
default / photographic / minimalist / flat |
| VARIABLE |
TYPE |
VALUE |
| output |
dict |
|
| output['results'] |
dict array |
|
| results[0]['output'] |
array |
array of 4 image urls |
outout = JinaAI.utils.image_to_base64(input)
| VARIABLE |
TYPE |
VALUE |
| input |
str |
Image path on disk |
| output |
str |
Base64 image |
outout = JinaAI.utils.is_url(input)
| VARIABLE |
TYPE |
VALUE |
| input |
str |
|
| output |
boolean |
|
outout = JinaAI.utils.is_base64(input)
| VARIABLE |
TYPE |
VALUE |
| input |
str |
|
| output |
boolean |
|