lukestanley commited on
Commit
e4b918c
1 Parent(s): 811e485

Linting with Black

Browse files
Files changed (2) hide show
  1. chill.py +11 -9
  2. utils.py +22 -17
chill.py CHANGED
@@ -29,17 +29,24 @@ suggestions = []
29
 
30
  start_time = time.time()
31
 
 
32
  class ImprovedText(BaseModel):
33
  text: str = Field(str, description="The improved text.")
34
 
 
35
  class SpicyScore(BaseModel):
36
  spicy_score: float = Field(float, description="The spiciness score of the text.")
37
 
 
38
  class Critique(BaseModel):
39
  critique: str = Field(str, description="The critique of the text.")
40
 
 
41
  class FaithfulnessScore(BaseModel):
42
- faithfulness_score: float = Field(float, description="The faithfulness score of the text.")
 
 
 
43
 
44
  improve_prompt = """
45
  Your task is to rephrase inflammatory text, so it is more calm and constructive, without changing the intended meaning.
@@ -135,7 +142,6 @@ Please score the text.
135
  """
136
 
137
 
138
-
139
  def improve_text():
140
  global suggestions
141
  replacements = {
@@ -143,7 +149,7 @@ def improve_text():
143
  "previous_suggestions": json.dumps(suggestions, indent=2),
144
  }
145
  resp_json = query_ai_prompt(improve_prompt, replacements, ImprovedText)
146
- #print('resp_json', resp_json)
147
  return resp_json["text"]
148
 
149
 
@@ -152,15 +158,11 @@ def critique_text(last_edit):
152
 
153
  # Query the AI for each of the new prompts separately
154
 
155
- critique_resp = query_ai_prompt(
156
- critique_prompt, replacements, Critique
157
- )
158
  faithfulness_resp = query_ai_prompt(
159
  faith_scorer_prompt, replacements, FaithfulnessScore
160
  )
161
- spiciness_resp = query_ai_prompt(
162
- spicy_scorer_prompt, replacements, SpicyScore
163
- )
164
 
165
  # Combine the results from the three queries into a single dictionary
166
  combined_resp = {
 
29
 
30
  start_time = time.time()
31
 
32
+
33
  class ImprovedText(BaseModel):
34
  text: str = Field(str, description="The improved text.")
35
 
36
+
37
  class SpicyScore(BaseModel):
38
  spicy_score: float = Field(float, description="The spiciness score of the text.")
39
 
40
+
41
  class Critique(BaseModel):
42
  critique: str = Field(str, description="The critique of the text.")
43
 
44
+
45
  class FaithfulnessScore(BaseModel):
46
+ faithfulness_score: float = Field(
47
+ float, description="The faithfulness score of the text."
48
+ )
49
+
50
 
51
  improve_prompt = """
52
  Your task is to rephrase inflammatory text, so it is more calm and constructive, without changing the intended meaning.
 
142
  """
143
 
144
 
 
145
  def improve_text():
146
  global suggestions
147
  replacements = {
 
149
  "previous_suggestions": json.dumps(suggestions, indent=2),
150
  }
151
  resp_json = query_ai_prompt(improve_prompt, replacements, ImprovedText)
152
+ # print('resp_json', resp_json)
153
  return resp_json["text"]
154
 
155
 
 
158
 
159
  # Query the AI for each of the new prompts separately
160
 
161
+ critique_resp = query_ai_prompt(critique_prompt, replacements, Critique)
 
 
162
  faithfulness_resp = query_ai_prompt(
163
  faith_scorer_prompt, replacements, FaithfulnessScore
164
  )
165
+ spiciness_resp = query_ai_prompt(spicy_scorer_prompt, replacements, SpicyScore)
 
 
166
 
167
  # Combine the results from the three queries into a single dictionary
168
  combined_resp = {
utils.py CHANGED
@@ -2,17 +2,22 @@ import json
2
  from typing import Any, Dict, Union
3
  import requests
4
 
5
- from llama_cpp import json_schema_to_gbnf # Only used directly to convert the JSON schema to GBNF,
 
 
 
6
  # The main interface is the HTTP server, not the library directly.
7
 
8
 
9
- def llm_streaming(prompt:str, pydantic_model_class, return_pydantic_object=False) -> Union[str, Dict[str, Any]]:
 
 
10
  schema = pydantic_model_class.model_json_schema()
11
-
12
  # Optional example field from schema, is not needed for the grammar generation
13
  if "example" in schema:
14
  del schema["example"]
15
-
16
  json_schema = json.dumps(schema)
17
  grammar = json_schema_to_gbnf(json_schema)
18
 
@@ -21,19 +26,18 @@ def llm_streaming(prompt:str, pydantic_model_class, return_pydantic_object=False
21
  "max_tokens": 1000,
22
  "grammar": grammar,
23
  "temperature": 1.0,
24
- "messages": [
25
- {
26
- "role": "user",
27
- "content": prompt
28
- }
29
- ],
30
  }
31
  headers = {
32
  "Content-Type": "application/json",
33
  }
34
 
35
- response = requests.post("http://localhost:5834/v1/chat/completions"
36
- , headers=headers, json=payload, stream=True)
 
 
 
 
37
  output_text = ""
38
  for chunk in response.iter_lines():
39
  if chunk:
@@ -43,10 +47,10 @@ def llm_streaming(prompt:str, pydantic_model_class, return_pydantic_object=False
43
  if chunk.strip() == "[DONE]":
44
  break
45
  chunk = json.loads(chunk)
46
- new_token = chunk.get('choices')[0].get('delta').get('content')
47
  if new_token:
48
  output_text = output_text + new_token
49
- print(new_token,sep='',end='',flush=True)
50
 
51
  if return_pydantic_object:
52
  model_object = pydantic_model_class.model_validate_json(output_text)
@@ -55,14 +59,15 @@ def llm_streaming(prompt:str, pydantic_model_class, return_pydantic_object=False
55
  json_output = json.loads(output_text)
56
  return json_output
57
 
 
58
  def replace_text(template: str, replacements: dict) -> str:
59
  for key, value in replacements.items():
60
  template = template.replace(f"{{{key}}}", value)
61
  return template
62
 
 
63
  def query_ai_prompt(prompt, replacements, model_class):
64
  prompt = replace_text(prompt, replacements)
65
- #print('prompt')
66
- #print(prompt)
67
  return llm_streaming(prompt, model_class)
68
-
 
2
  from typing import Any, Dict, Union
3
  import requests
4
 
5
+ from llama_cpp import (
6
+ json_schema_to_gbnf,
7
+ ) # Only used directly to convert the JSON schema to GBNF,
8
+
9
  # The main interface is the HTTP server, not the library directly.
10
 
11
 
12
+ def llm_streaming(
13
+ prompt: str, pydantic_model_class, return_pydantic_object=False
14
+ ) -> Union[str, Dict[str, Any]]:
15
  schema = pydantic_model_class.model_json_schema()
16
+
17
  # Optional example field from schema, is not needed for the grammar generation
18
  if "example" in schema:
19
  del schema["example"]
20
+
21
  json_schema = json.dumps(schema)
22
  grammar = json_schema_to_gbnf(json_schema)
23
 
 
26
  "max_tokens": 1000,
27
  "grammar": grammar,
28
  "temperature": 1.0,
29
+ "messages": [{"role": "user", "content": prompt}],
 
 
 
 
 
30
  }
31
  headers = {
32
  "Content-Type": "application/json",
33
  }
34
 
35
+ response = requests.post(
36
+ "http://localhost:5834/v1/chat/completions",
37
+ headers=headers,
38
+ json=payload,
39
+ stream=True,
40
+ )
41
  output_text = ""
42
  for chunk in response.iter_lines():
43
  if chunk:
 
47
  if chunk.strip() == "[DONE]":
48
  break
49
  chunk = json.loads(chunk)
50
+ new_token = chunk.get("choices")[0].get("delta").get("content")
51
  if new_token:
52
  output_text = output_text + new_token
53
+ print(new_token, sep="", end="", flush=True)
54
 
55
  if return_pydantic_object:
56
  model_object = pydantic_model_class.model_validate_json(output_text)
 
59
  json_output = json.loads(output_text)
60
  return json_output
61
 
62
+
63
  def replace_text(template: str, replacements: dict) -> str:
64
  for key, value in replacements.items():
65
  template = template.replace(f"{{{key}}}", value)
66
  return template
67
 
68
+
69
  def query_ai_prompt(prompt, replacements, model_class):
70
  prompt = replace_text(prompt, replacements)
71
+ # print('prompt')
72
+ # print(prompt)
73
  return llm_streaming(prompt, model_class)