Skip to content

Commit 8f29b81

Browse files
authored
Merge pull request #929 from parea-ai/new-cookbook
new cookbook, set openai.api_type
2 parents 03a4d51 + 205be91 commit 8f29b81

File tree

3 files changed

+58
-1
lines changed

3 files changed

+58
-1
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import os
2+
3+
from dotenv import load_dotenv
4+
from openai import OpenAI
5+
6+
from parea import Parea, trace
7+
from parea.evals.rag import context_query_relevancy_factory
8+
from parea.schemas import TestCase
9+
10+
load_dotenv()
11+
12+
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
13+
p = Parea(api_key=os.getenv("PAREA_API_KEY"))
14+
p.wrap_openai_client(client)
15+
16+
context_query_relevancy = context_query_relevancy_factory(model="gpt-4o", context_fields=["context"])
17+
18+
19+
@trace(eval_funcs=[context_query_relevancy])
20+
def run_experiment(question: str, context: str) -> str:
21+
return (
22+
client.chat.completions.create(
23+
model="gpt-4o",
24+
temperature=0,
25+
messages=[{"role": "user", "content": f"Answer question using context. Context: {context}. Question: {question}"}],
26+
)
27+
.choices[0]
28+
.message.content
29+
)
30+
31+
32+
# You can fetch a dataset directly and then modify it to meet our needs before passing it to p.experiment.
33+
def rename_information_to_context(num_samples: int = 3):
34+
dataset = p.get_collection("Example_Dataset_Name")
35+
if dataset:
36+
testcases: list[TestCase] = list(dataset.test_cases.values())
37+
# Assume dataset looks like this:
38+
# [
39+
# inputs={"information": "Some long document", "question": "What is X?"}, target="X is Y" ...
40+
# ]
41+
return [{"context": case.inputs["information"], "question": case.inputs["question"], "target": case.target} for case in testcases[:num_samples]]
42+
return []
43+
44+
45+
def main():
46+
data = rename_information_to_context()
47+
experiment = p.experiment("My_Experiment_Name", func=run_experiment, data=data)
48+
experiment.run()
49+
50+
51+
if __name__ == "__main__":
52+
main()

parea/evals/utils.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,12 @@ def safe_json_loads(s) -> dict:
4242
def call_openai(
4343
messages, model, temperature=1.0, max_tokens=None, top_p=1.0, frequency_penalty=0.0, presence_penalty=0.0, response_format=None, n=1, is_azure=False
4444
) -> Union[str, List[str]]:
45+
openai.api_type = "openai"
4546
if is_azure:
4647
from openai.lib.azure import AzureOpenAI
4748

49+
openai.api_type = "azure"
50+
4851
completion = AzureOpenAI().chat.completions.create(
4952
model=model,
5053
messages=messages,
@@ -94,9 +97,11 @@ def call_openai(
9497

9598

9699
def embed(model, input, is_azure=False) -> List[float]:
100+
openai.api_type = "openai"
97101
if is_azure:
98102
from openai.lib.azure import AzureOpenAI
99103

104+
openai.api_type = "azure"
100105
return AzureOpenAI().embeddings.create(model=model, input=input, encoding_format="float").data[0].embedding
101106
if openai_version.startswith("0."):
102107
return openai.Embedding.create(model=model, input=input, encoding_format="float").data[0]["embedding"]

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ build-backend = "poetry.core.masonry.api"
66
[tool.poetry]
77
name = "parea-ai"
88
packages = [{ include = "parea" }]
9-
version = "0.2.171"
9+
version = "0.2.172"
1010
description = "Parea python sdk"
1111
readme = "README.md"
1212
authors = ["joel-parea-ai <[email protected]>"]

0 commit comments

Comments
 (0)