ai-parrot-client-jev
TypeSafe AI System One client satellite for AI-Parrot, targeting the Jev model.
Jev is not a text generator: you send it state (a string or JSON document)
plus typed questions and it returns structured answers with calibrated
probabilities — a choice from a fixed set, a score on an ordered rubric,
or a noul (yes/no) probability. parrot.clients.jev.JevClient maps that
contract onto the AbstractClient interface:
ask(prompt, questions=...)— the prompt (plus optional system prompt and conversation history) becomes the state; the answers come back as anAIMessagewhoseoutput/structured_outputis aSystemOneResponse.invoke(prompt, output_type=MyModel)— a Pydantic model is translated into questions (bool→ noul,Literal/Enum→ choice,int/floatwithcriterialevels → score) and the answers are validated back into it.system_one(state, questions)— the raw, typed API call.
uv pip install ai-parrot-client-jev
export TYPESAFE_API_KEY=...
from parrot.clients.jev import JevClient, Choice, Noul, Score
client = JevClient() # reads TYPESAFE_API_KEY; calls jev-latest by default
ticket = (
"Hi, I've been trying to connect my Stripe account for 3 days and it keeps "
"failing. I'm losing sales. Please help ASAP."
)
response = await client.system_one(
state=ticket,
questions={
"department": Choice(
instructions="Which team should handle this",
criteria={
"billing": "Payment or subscription issues",
"technical": "Bugs or integration problems",
"sales": "Pricing or account questions",
},
),
"frustration": Score(
instructions="How frustrated the customer appears",
criteria=["Calm, just stating facts", "Frustrated but civil", "Very angry, strong language"],
),
"is_urgent": Noul(instructions="The message conveys urgency or time-sensitivity"),
},
)
response.answers["department"].choice # "billing"
response.answers["frustration"].score # 1.035
response.answers["is_urgent"].noul # 0.999
Models (JevModel): jev-latest (default alias, stable), jev-preview
(alias, newest build), jev-1.13.0 (versioned). Text input only; 64k tokens
per request. Output tokens are free.
Registers itself with LLMFactory under the jev and typesafe provider
keys via the parrot.clients entry-point group.
Metadata
Release files for ai-parrot-client-jev 0.2.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ai_parrot_client_jev-0.2.5.tar.gz | 20.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ai_parrot_client_jev-0.2.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 43.8 kB
Release files / ai_parrot_client_jev-0.2.5.tar.gz
| Download URL | ai_parrot_client_jev-0.2.5.tar.gz |
|---|---|
| Size | 20.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b4d6735dcca123a4d7843dc0fea4876d022c6938318415d70d466521a329c1e4
|
|
BLAKE2b-256 checksum How to use checksums |
3c5cf97a75d911a88feed6b8cd0e9429b5e91b24fe5143fe0de397876f58e773
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / ai_parrot_client_jev-0.2.5-py3-none-any.whl
| Download URL | ai_parrot_client_jev-0.2.5-py3-none-any.whl |
|---|---|
| Size | 23.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8ebd1a23f73bf693924cd465e2ff9e5694f638a168f818f3ee298065020270bf
|
|
BLAKE2b-256 checksum How to use checksums |
5188fe9a3c4180686bfd7964ef9c15856c5b379428a4780bf0f29a6bdf00fda8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|