Skip to content

Commit 5fc2d73

Browse files
add: fp.add_ideal_answer (#24)
1 parent cf20133 commit 5fc2d73

File tree

12 files changed

+1172
-6
lines changed

12 files changed

+1172
-6
lines changed

.github/workflows/run-unit-tests.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ jobs:
1717
echo CLAUDE_API_KEY=${{ secrets.CLAUDE_API_KEY }} >> .env
1818
echo GEMINI_API_KEY=${{ secrets.GEMINI_API_KEY }} >> .env
1919
echo OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} >> .env
20+
echo FLOW_PROMPT_API_URI=${{ secrets.FLOW_PROMPT_API_URI }} >> .env
21+
echo FLOW_PROMPT_API_TOKEN=${{ secrets.FLOW_PROMPT_API_TOKEN }} >> .env
2022
cat .env
2123
2224
- name: Install dependencies

flow_prompt/prompt/flow_prompt.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from dataclasses import dataclass
44
from decimal import Decimal
55
import requests
6+
import time
67
from flow_prompt.settings import FLOW_PROMPT_API_URI
78
from flow_prompt import Secrets, settings
89
from flow_prompt.ai_models.ai_model import AI_MODELS_PROVIDER
@@ -166,6 +167,9 @@ def call(
166167
result.metrics.latency = current_timestamp_ms() - start_time
167168

168169
if settings.USE_API_SERVICE and self.api_token:
170+
timestamp = int(time.time() * 1000)
171+
result.id = f"{prompt_id}#{timestamp}"
172+
169173
self.worker.add_task(
170174
self.api_token,
171175
pipe_prompt.service_dump(),
@@ -184,6 +188,17 @@ def call(
184188
)
185189
raise e
186190

191+
def add_ideal_answer(
192+
self,
193+
response_id: str,
194+
ideal_answer: str
195+
):
196+
response = FlowPromptService.update_response_ideal_answer(
197+
self.api_token, response_id, ideal_answer
198+
)
199+
200+
return response
201+
187202
def get_pipe_prompt(self, prompt_id: str, version: str = None) -> PipePrompt:
188203
"""
189204
if the user has keys: lib -> service: get_actual_prompt(local_prompt) -> Service:

flow_prompt/responses.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class AIResponse:
3333
finish_reason: str = ""
3434
prompt: Prompt = field(default_factory=Prompt)
3535
metrics: Metrics = field(default_factory=Metrics)
36+
id: str = ""
3637

3738
@property
3839
def response(self) -> str:

flow_prompt/services/SaveWorker.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,15 @@ def worker(self):
3333
sleep(1)
3434
continue
3535
api_token, prompt_data, context, response, test_data = task
36+
3637
FlowPromptService.save_user_interaction(
3738
api_token, prompt_data, context, response
3839
)
40+
3941
FlowPromptService.create_test_with_ideal_answer(
4042
api_token, prompt_data, context, test_data
4143
)
44+
4245
self.queue.task_done()
4346

4447
def add_task(

flow_prompt/services/flow_prompt/__init__.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,9 @@ def save_user_interaction(
133133
"response": {"content": response.content},
134134
"metrics": asdict(response.metrics),
135135
"request": asdict(response.prompt),
136+
'timestamp': response.id.split('#')[1]
136137
}
138+
137139
logger.debug(f"Request to {url} with data: {data}")
138140
json_data = json.dumps(data, cls=DecimalEncoder)
139141

@@ -142,6 +144,31 @@ def save_user_interaction(
142144
return response.json()
143145
else:
144146
logger.error(response)
147+
148+
@classmethod
149+
def update_response_ideal_answer(
150+
cls,
151+
api_token: str,
152+
log_id: str,
153+
ideal_answer: str
154+
):
155+
url = f"{cls.url}lib/logs"
156+
headers = {"Authorization": f"Token {api_token}"}
157+
data = {
158+
"log_id": log_id,
159+
"ideal_answer": ideal_answer
160+
}
161+
162+
logger.debug(f"Request to {url} with data: {data}")
163+
json_data = json.dumps(data, cls=DecimalEncoder)
164+
165+
response = requests.put(url, headers=headers, data=json_data)
166+
167+
if response.status_code == 200:
168+
return response.json()
169+
else:
170+
logger.error(response)
171+
return response
145172

146173
@classmethod
147174
def create_test_with_ideal_answer(

flow_prompt/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242

4343
@dataclass
4444
class Secrets:
45-
API_TOKEN: str = field(default_factory=lambda: os.getenv("FLOW_PROMPT_API_TOKEN"))
45+
API_TOKEN: str = os.getenv("FLOW_PROMPT_API_TOKEN")
4646
OPENAI_API_KEY: str = field(default_factory=lambda: os.getenv("OPENAI_API_KEY"))
4747
CLAUDE_API_KEY: str = field(default_factory=lambda: os.getenv("CLAUDE_API_KEY"))
4848
GEMINI_API_KEY: str = field(default_factory=lambda: os.getenv("GEMINI_API_KEY"))

0 commit comments

Comments
 (0)