darsoarafa commited on
Commit
70b9de6
·
verified ·
1 Parent(s): 42e4686

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -23
app.py CHANGED
@@ -38,7 +38,7 @@ from pydantic_ai.models.openai import OpenAIModel
38
  model = OpenAIModel(
39
  'gemma-2-2b-it',
40
  base_url='http://localhost:1234/v1',
41
- api_key='darso-local-api-key',
42
  )
43
  model11 = OpenAIModel(
44
  'mistral-7b-instruct-v0.3',
@@ -46,6 +46,7 @@ model11 = OpenAIModel(
46
  api_key='your-local-api-key',
47
  )
48
 
 
49
  # Model Pydantic untuk Sales Order
50
  class product1(BaseModel):
51
  ds_productCode: Optional[str] = "" #str = Field(..., min_length=1, max_length=20)
@@ -74,20 +75,20 @@ class SalesOrder(BaseModel):
74
  ds_shippingAddress: Optional[str] = ""
75
  ds_totalAmount:Optional[float] = 0
76
  #ds_paymentTerms: Optional[str] = ""
77
-
78
  #agent= Agent('gemini-1.5-flash', result_type=SalesOrder)
79
 
80
  # # Create a system prompt to guide the model
81
  SYSTEM_PROMPT = """
82
- You are a helper that extracts SalesOrder information from text and formats it as a SalesOrder class.
83
  """
84
  #agent3 = Agent(model=ollama_model, result_type=PetList, retries=3, system_prompt=SYSTEM_PROMPT)
85
  #agent3 = Agent(model=ollama_model, retries=3, system_prompt=SYSTEM_PROMPT)
86
 
87
 
88
-
89
- agent = Agent('gemini-1.5-flash') # OK-1
90
- #agent = Agent(model) # OK-2
91
 
92
 
93
 
@@ -125,7 +126,7 @@ async def get_db(request: Request) -> Database:
125
  async def get_chat(database: Database = Depends(get_db)) -> Response:
126
  msgs = await database.get_messages()
127
  return Response(
128
- b'\n'.join(json.dumps(to_chat_message(m)).encode('utf-8') for m in msgs),
129
  media_type='text/plain',
130
  )
131
 
@@ -133,7 +134,6 @@ async def get_chat(database: Database = Depends(get_db)) -> Response:
133
 
134
  class ChatMessage(TypedDict):
135
  """Format of messages sent to the browser."""
136
-
137
  role: Literal['user', 'model']
138
  timestamp: str
139
  content: str
@@ -157,9 +157,10 @@ def to_chat_message(m: ModelMessage) -> ChatMessage:
157
  }
158
  raise UnexpectedModelBehavior(f'Unexpected message type for chat app: {m}')
159
 
160
- def to_ds_message(m: ModelMessage) -> SalesOrder:
161
- first_part = m.parts[0]
162
  if isinstance(m, ModelRequest):
 
163
  if isinstance(first_part, UserPromptPart):
164
  return {
165
  'role': 'user',
@@ -167,15 +168,16 @@ def to_ds_message(m: ModelMessage) -> SalesOrder:
167
  'content': first_part.content,
168
  }
169
  elif isinstance(m, ModelResponse):
 
170
  if isinstance(first_part, TextPart):
171
  return {
172
  'role': 'model',
173
  'timestamp': m.timestamp.isoformat(),
174
  'content': first_part.content,
175
  }
176
- raise UnexpectedModelBehavior(f'Unexpected message type for chat app: {m}')
177
 
178
- def to_form_message(m: ModelMessage) -> SalesOrder:
179
  first_part = m.parts[0]
180
  if isinstance(m, ModelResponse):
181
  if isinstance(first_part, TextPart):
@@ -220,8 +222,9 @@ async def post_chat(
220
  #Nama pembeli: Bu Lurah, alamat Bekasi Barat, hari ini membeli Teh Putih dua kaleng harga 110000 per kaleng, juga membeli Teh Hitam 3 kaleng, harga per kaleng 60000. Ongkos kirim ke Bekasi Barat sebesar 36 ribu
221
  #nama pembeli Mas Anang alamat di Jalan Cisitu no.5 Bandung, membeli Chocobar 5 batang harga 15 ribu per batang, dan membeli Rice Cracker 4 buah harga 20 ribu per buah, ongkos kirim ke Jalan Cisitu no.5 sebesar 7 ribu rupiah
222
  try:
223
- prompt2=f"Ekstrak data Sales Order dari teks: {prompt1}. Format output yang diinginkan hanya berupa JSON saja sesuai class Sales Order. Tidak usah ada penjelasan lain. Sekali lagi: Output hanya JSON saja. Hari ini adalah tanggal {date.today()}. untuk Nomor Sales Order pasangkan dengan key ds_salesOrderId, untuk Tanggal Sales pasangkan dengan key ds_salesDate, untuk Nama Customer pasangkan dengan Key ds_customerName, untuk Alamat Customer pasangkan dengan key ds_customerAddress, untuk Daftar Item Barang pasangkan dengan key ds_items, untuk Kode Barang pasangkan dengan key ds_productCode, untuk Nama Barang pasangkan dengan key ds_productName, untuk Quantity pasangkan dengan key ds_quantity, untuk Unit Price pasangkan dengan key ds_unitPrice, untuk Total Nilai Per Baris Barang pasangkan dengan key ds_itemAmt. Setelah Daftar Item Barang, selanjutnya untuk Ongkos Kirim pasangkan dengan key ds_shippingCost, untuk Alamat Pengiriman pasangkan dengan key ds_shippingAddress, untuk Total Nilai Sales Order pasangkan dengan key ds_totalAmount"
224
- #prompt2=f"Ekstrak data Sales Order dari teks: {prompt1}. Hari ini adalah tanggal {date.today()}"
 
225
  yield (
226
  json.dumps(
227
  {
@@ -232,15 +235,26 @@ async def post_chat(
232
  ).encode('utf-8')
233
  + b'\n'
234
  )
235
- messages = await database.get_messages()
236
- async with agent.run_stream(prompt2, message_history=messages) as result:
237
  async for text in result.stream(debounce_by=0.1):
238
  m = ModelResponse.from_text(content=text, timestamp=result.timestamp())
239
  yield json.dumps(to_ds_message(m)).encode('utf-8') + b'\n'
240
 
241
  ##print(result.usage())
242
- await database.add_messages(result.new_messages_json())
243
  darso = json.loads(result.new_messages_json())
 
 
 
 
 
 
 
 
 
 
 
244
  darso1= darso[1]
245
  #print("1|", darso1)
246
  darso2= json.loads(json.dumps(darso1))
@@ -418,8 +432,10 @@ async def post_chat(
418
  </form>
419
  """
420
  m = ModelResponse.from_text(content=formDs, timestamp=result.timestamp())
421
- yield json.dumps(to_form_message(m)).encode('utf-8') + b'\n'
422
- print("OK")
 
 
423
  ##print(len(items))
424
  #darso7 = SalesOrder.model_validate(darso6)
425
  #print("[--",darso7.ds_customerName,"--]")
@@ -435,11 +451,10 @@ async def post_chat(
435
  print(">>>", prompt, "<<<")
436
  return StreamingResponse(ds_messages(prompt), media_type='text/plain')
437
  elif prompt[0] != "@" :
438
- print("biasa")
439
- #return StreamingResponse(stream_messages(), media_type='text/plain')
440
  return StreamingResponse(ds_messages(prompt), media_type='text/plain')
441
  print("** selesai **")
442
- return StreamingResponse(stream_messages(), media_type='text/plain')
443
 
444
  P = ParamSpec('P')
445
  R = TypeVar('R')
@@ -520,7 +535,6 @@ class Database:
520
  *args, # type: ignore
521
  )
522
 
523
-
524
  if __name__ == '__main__':
525
  import uvicorn
526
  uvicorn.run(
 
38
  model = OpenAIModel(
39
  'gemma-2-2b-it',
40
  base_url='http://localhost:1234/v1',
41
+ api_key='your-local-api-key',
42
  )
43
  model11 = OpenAIModel(
44
  'mistral-7b-instruct-v0.3',
 
46
  api_key='your-local-api-key',
47
  )
48
 
49
+ #DeepSeek Key: sk-694660c67c3947e4853019473f30240d https://api.deepseek.com
50
  # Model Pydantic untuk Sales Order
51
  class product1(BaseModel):
52
  ds_productCode: Optional[str] = "" #str = Field(..., min_length=1, max_length=20)
 
75
  ds_shippingAddress: Optional[str] = ""
76
  ds_totalAmount:Optional[float] = 0
77
  #ds_paymentTerms: Optional[str] = ""
78
+ os.environ['GEMINI_API_KEY'] = 'AIzaSyAsVIHsPIIfDBTb2K6VNdNlMt05t8x3mtE'
79
  #agent= Agent('gemini-1.5-flash', result_type=SalesOrder)
80
 
81
  # # Create a system prompt to guide the model
82
  SYSTEM_PROMPT = """
83
+ Anda adalah asisten yang ahli melakukan ekstrak data SalesOrder dari teks user. Format output yang diinginkan hanya berupa JSON saja sesuai class SalesOrder. Tidak usah ada penjelasan lain. Sekali lagi: Output hanya JSON saja. Untuk Nomor Sales Order pasangkan dengan key ds_salesOrderId, untuk Tanggal Sales pasangkan dengan key ds_salesDate, untuk Nama Customer pasangkan dengan Key ds_customerName, untuk Alamat Customer pasangkan dengan key ds_customerAddress, untuk Daftar Item Barang pasangkan dengan key ds_items, untuk Kode Barang pasangkan dengan key ds_productCode, untuk Nama Barang pasangkan dengan key ds_productName, untuk Quantity pasangkan dengan key ds_quantity, untuk Unit Price pasangkan dengan key ds_unitPrice, untuk Total Nilai Per Baris Barang pasangkan dengan key ds_itemAmt, untuk Ongkos Kirim pasangkan dengan key ds_shippingCost, untuk Alamat Pengiriman pasangkan dengan key ds_shippingAddress, untuk Total Nilai Sales Order pasangkan dengan key ds_totalAmount
84
  """
85
  #agent3 = Agent(model=ollama_model, result_type=PetList, retries=3, system_prompt=SYSTEM_PROMPT)
86
  #agent3 = Agent(model=ollama_model, retries=3, system_prompt=SYSTEM_PROMPT)
87
 
88
 
89
+ #INI SAJA. SALAH SATU
90
+ agent = Agent('gemini-1.5-flash', system_prompt=SYSTEM_PROMPT) # OK-Gemini
91
+ #agent = Agent(model) # OK-Lokal
92
 
93
 
94
 
 
126
  async def get_chat(database: Database = Depends(get_db)) -> Response:
127
  msgs = await database.get_messages()
128
  return Response(
129
+ b'\n'.join(json.dumps(to_ds_message(m)).encode('utf-8') for m in msgs),
130
  media_type='text/plain',
131
  )
132
 
 
134
 
135
  class ChatMessage(TypedDict):
136
  """Format of messages sent to the browser."""
 
137
  role: Literal['user', 'model']
138
  timestamp: str
139
  content: str
 
157
  }
158
  raise UnexpectedModelBehavior(f'Unexpected message type for chat app: {m}')
159
 
160
+ def to_ds_message(m: ModelMessage) -> ChatMessage:
161
+
162
  if isinstance(m, ModelRequest):
163
+ first_part = m.parts[1]
164
  if isinstance(first_part, UserPromptPart):
165
  return {
166
  'role': 'user',
 
168
  'content': first_part.content,
169
  }
170
  elif isinstance(m, ModelResponse):
171
+ first_part = m.parts[0]
172
  if isinstance(first_part, TextPart):
173
  return {
174
  'role': 'model',
175
  'timestamp': m.timestamp.isoformat(),
176
  'content': first_part.content,
177
  }
178
+ raise UnexpectedModelBehavior(f'Unexpected ds-message type for chat app: {m}')
179
 
180
+ def to_form_message(m: ModelMessage) -> ChatMessage:
181
  first_part = m.parts[0]
182
  if isinstance(m, ModelResponse):
183
  if isinstance(first_part, TextPart):
 
222
  #Nama pembeli: Bu Lurah, alamat Bekasi Barat, hari ini membeli Teh Putih dua kaleng harga 110000 per kaleng, juga membeli Teh Hitam 3 kaleng, harga per kaleng 60000. Ongkos kirim ke Bekasi Barat sebesar 36 ribu
223
  #nama pembeli Mas Anang alamat di Jalan Cisitu no.5 Bandung, membeli Chocobar 5 batang harga 15 ribu per batang, dan membeli Rice Cracker 4 buah harga 20 ribu per buah, ongkos kirim ke Jalan Cisitu no.5 sebesar 7 ribu rupiah
224
  try:
225
+ #prompt2=f"Ekstrak data Sales Order dari teks: {prompt1}. Format output yang diinginkan hanya berupa JSON saja sesuai class Sales Order. Tidak usah ada penjelasan lain. Sekali lagi: Output hanya JSON saja. Hari ini adalah tanggal {date.today()}. untuk Nomor Sales Order pasangkan dengan key ds_salesOrderId, untuk Tanggal Sales pasangkan dengan key ds_salesDate, untuk Nama Customer pasangkan dengan Key ds_customerName, untuk Alamat Customer pasangkan dengan key ds_customerAddress, untuk Daftar Item Barang pasangkan dengan key ds_items, untuk Kode Barang pasangkan dengan key ds_productCode, untuk Nama Barang pasangkan dengan key ds_productName, untuk Quantity pasangkan dengan key ds_quantity, untuk Unit Price pasangkan dengan key ds_unitPrice, untuk Total Nilai Per Baris Barang pasangkan dengan key ds_itemAmt. Setelah Daftar Item Barang, selanjutnya untuk Ongkos Kirim pasangkan dengan key ds_shippingCost, untuk Alamat Pengiriman pasangkan dengan key ds_shippingAddress, untuk Total Nilai Sales Order pasangkan dengan key ds_totalAmount"
226
+ #prompt2=f"Ekstrak data Sales Order dari teks: {prompt1}. Hari ini adalah tanggal {date.today()}"
227
+ prompt2=f"{prompt1}. Hari ini adalah tanggal {date.today()}"
228
  yield (
229
  json.dumps(
230
  {
 
235
  ).encode('utf-8')
236
  + b'\n'
237
  )
238
+ #messages = await database.get_messages()
239
+ async with agent.run_stream(prompt2) as result:
240
  async for text in result.stream(debounce_by=0.1):
241
  m = ModelResponse.from_text(content=text, timestamp=result.timestamp())
242
  yield json.dumps(to_ds_message(m)).encode('utf-8') + b'\n'
243
 
244
  ##print(result.usage())
245
+ #await database.add_messages(result.new_messages_json())
246
  darso = json.loads(result.new_messages_json())
247
+ #print(darso)
248
+ darso0= darso[0]
249
+ #darso0.pop(darso0['parts'][0])
250
+ #print("00|------------------")
251
+ #print("01|", darso0 )
252
+ #print("01a|", darso0['parts'][0] )
253
+ #print("01b|", darso0['parts'][1] )
254
+ darso0['parts'][0] = darso0['parts'][1]
255
+ #print("01?|", darso0 )
256
+ #print("01??|", darso )
257
+ #print("02|------------------")
258
  darso1= darso[1]
259
  #print("1|", darso1)
260
  darso2= json.loads(json.dumps(darso1))
 
432
  </form>
433
  """
434
  m = ModelResponse.from_text(content=formDs, timestamp=result.timestamp())
435
+ yield json.dumps(to_ds_message(m)).encode('utf-8') + b'\n'
436
+ print("OK:")
437
+ #await database.add_messages(result.new_messages_json())
438
+ await database.add_messages(json.dumps(darso))
439
  ##print(len(items))
440
  #darso7 = SalesOrder.model_validate(darso6)
441
  #print("[--",darso7.ds_customerName,"--]")
 
451
  print(">>>", prompt, "<<<")
452
  return StreamingResponse(ds_messages(prompt), media_type='text/plain')
453
  elif prompt[0] != "@" :
454
+ #print("biasa")
 
455
  return StreamingResponse(ds_messages(prompt), media_type='text/plain')
456
  print("** selesai **")
457
+ return StreamingResponse(ds_messages(prompt), media_type='text/plain')
458
 
459
  P = ParamSpec('P')
460
  R = TypeVar('R')
 
535
  *args, # type: ignore
536
  )
537
 
 
538
  if __name__ == '__main__':
539
  import uvicorn
540
  uvicorn.run(