DocUA commited on
Commit
040a3df
·
1 Parent(s): 5a9d042
Files changed (3) hide show
  1. config.py +0 -11
  2. main.py +83 -27
  3. requirements.txt +1 -0
config.py DELETED
@@ -1,11 +0,0 @@
1
- import os
2
- from dotenv import load_dotenv
3
-
4
- # Завантажуємо налаштування з .env файлу
5
- load_dotenv()
6
-
7
- OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
8
-
9
- if not OPENAI_API_KEY:
10
- raise ValueError("API ключ OpenAI не знайдено. Додайте його в .env файл.")
11
-
 
 
 
 
 
 
 
 
 
 
 
 
main.py CHANGED
@@ -15,6 +15,7 @@ from typing import Union, List
15
  import asyncio
16
  from anthropic import Anthropic
17
  from openai import OpenAI
 
18
  from llama_index.core import (
19
  StorageContext,
20
  ServiceContext,
@@ -46,6 +47,8 @@ aws_access_key_id = os.getenv("AWS_ACCESS_KEY_ID")
46
  aws_secret_access_key = os.getenv("AWS_SECRET_ACCESS_KEY")
47
  openai_api_key = os.getenv("OPENAI_API_KEY")
48
  anthropic_api_key=os.getenv("ANTHROPIC_API_KEY")
 
 
49
 
50
  embed_model = OpenAIEmbedding(model_name="text-embedding-3-small")
51
  Settings.embed_model = embed_model
@@ -103,8 +106,6 @@ else:
103
 
104
 
105
 
106
- # PERSIST_DIR = "/home/docsa/Legal_Position/Save_index"
107
-
108
  # Apply nest_asyncio to handle nested async calls
109
  nest_asyncio.apply()
110
 
@@ -427,43 +428,96 @@ LEGAL_POSITION_SCHEMA = {
427
  }
428
 
429
 
430
- def generate_legal_position(court_decision_text, comment_input):
431
- """
432
- Генерує правову позицію на основі тексту судового рішення.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
433
 
434
- Args:
435
- court_decision_text (str): Текст судового рішення для аналізу
436
- user_question (str): Питання користувача (наразі не використовується)
 
 
 
 
437
 
438
- Returns:
439
- dict: Словник з правовою позицією або повідомленням про помилку
440
- """
441
  try:
 
 
 
 
 
 
 
442
  # Ініціалізація моделі
443
- llm_lp = OpenAI(
444
- # model="ft:gpt-4o-mini-2024-07-18:personal:legal-position-400:AT3wvKsU",
445
- model="ft:gpt-4o-mini-2024-07-18:personal:legal-position-1500:Aaiu4WZd",
446
- temperature=0
447
  )
448
 
449
- # Формування повідомлень для чату
450
- # Формуємо контент з урахуванням коментаря
451
  content = LEGAL_POSITION_PROMPT.format(
452
  court_decision_text=court_decision_text,
453
  comment=comment_input if comment_input else "Коментар відсутній"
454
  )
455
 
456
- # Формування повідомлень для чату
457
- messages = [
458
- ChatMessage(role="system", content=SYSTEM_PROMPT),
459
- ChatMessage(role="user", content=content),
460
- ]
461
 
462
- # Отримання відповіді від моделі
463
- response = llm_lp.chat(messages, response_format=LEGAL_POSITION_SCHEMA)
464
 
465
  # Обробка відповіді
466
- parsed_response = json.loads(response.message.content)
467
 
468
  # Перевірка наявності обов'язкових полів
469
  if all(field in parsed_response for field in ["title", "text", "proceeding", "category"]):
@@ -471,7 +525,7 @@ def generate_legal_position(court_decision_text, comment_input):
471
 
472
  return {
473
  "title": "Error: Missing required fields in response",
474
- "text": response.message.content,
475
  "proceeding": "Unknown",
476
  "category": "Error"
477
  }
@@ -479,7 +533,7 @@ def generate_legal_position(court_decision_text, comment_input):
479
  except json.JSONDecodeError:
480
  return {
481
  "title": "Error parsing response",
482
- "text": response.message.content,
483
  "proceeding": "Unknown",
484
  "category": "Error"
485
  }
@@ -492,6 +546,8 @@ def generate_legal_position(court_decision_text, comment_input):
492
  }
493
 
494
 
 
 
495
  def create_gradio_interface():
496
  async def generate_position_action(url):
497
  try:
 
15
  import asyncio
16
  from anthropic import Anthropic
17
  from openai import OpenAI
18
+ import google.generativeai as genai
19
  from llama_index.core import (
20
  StorageContext,
21
  ServiceContext,
 
47
  aws_secret_access_key = os.getenv("AWS_SECRET_ACCESS_KEY")
48
  openai_api_key = os.getenv("OPENAI_API_KEY")
49
  anthropic_api_key=os.getenv("ANTHROPIC_API_KEY")
50
+ genai.configure(api_key=os.environ["GOOGLE_API_KEY"])
51
+
52
 
53
  embed_model = OpenAIEmbedding(model_name="text-embedding-3-small")
54
  Settings.embed_model = embed_model
 
106
 
107
 
108
 
 
 
109
  # Apply nest_asyncio to handle nested async calls
110
  nest_asyncio.apply()
111
 
 
428
  }
429
 
430
 
431
+ # def generate_legal_position(court_decision_text, comment_input):
432
+ # try:
433
+ # # Ініціалізація моделі
434
+ # llm_lp = OpenAI(
435
+ # # model="ft:gpt-4o-mini-2024-07-18:personal:legal-position-400:AT3wvKsU",
436
+ # model="ft:gpt-4o-mini-2024-07-18:personal:legal-position-1500:Aaiu4WZd",
437
+ # temperature=0
438
+ # )
439
+ #
440
+ # # Формування повідомлень для чату
441
+ # # Формуємо контент з урахуванням коментаря
442
+ # content = LEGAL_POSITION_PROMPT.format(
443
+ # court_decision_text=court_decision_text,
444
+ # comment=comment_input if comment_input else "Коментар відсутній"
445
+ # )
446
+ #
447
+ # # Формування повідомлень для чату
448
+ # messages = [
449
+ # ChatMessage(role="system", content=SYSTEM_PROMPT),
450
+ # ChatMessage(role="user", content=content),
451
+ # ]
452
+ #
453
+ # # Отримання відповіді від моделі
454
+ # response = llm_lp.chat(messages, response_format=LEGAL_POSITION_SCHEMA)
455
+ #
456
+ # # Обробка відповіді
457
+ # parsed_response = json.loads(response.message.content)
458
+ #
459
+ # # Перевірка наявності обов'язкових полів
460
+ # if all(field in parsed_response for field in ["title", "text", "proceeding", "category"]):
461
+ # return parsed_response
462
+ #
463
+ # return {
464
+ # "title": "Error: Missing required fields in response",
465
+ # "text": response.message.content,
466
+ # "proceeding": "Unknown",
467
+ # "category": "Error"
468
+ # }
469
+ #
470
+ # except json.JSONDecodeError:
471
+ # return {
472
+ # "title": "Error parsing response",
473
+ # "text": response.message.content,
474
+ # "proceeding": "Unknown",
475
+ # "category": "Error"
476
+ # }
477
+ # except Exception as e:
478
+ # return {
479
+ # "title": "Unexpected error",
480
+ # "text": str(e),
481
+ # "proceeding": "Unknown",
482
+ # "category": "Error"
483
+ # }
484
+
485
 
486
+ def generate_legal_position(court_decision_text, comment_input):
487
+ if not isinstance(court_decision_text, str) or not court_decision_text.strip():
488
+ return {
489
+ "title": "Invalid input",
490
+ "text": "Court decision text is required and must be non-empty.",
491
+ "status": "Error"
492
+ }
493
 
 
 
 
494
  try:
495
+ # Конфігурація моделі
496
+ generation_config = {
497
+ "temperature": 0,
498
+ "max_output_tokens": 8192,
499
+ "response_mime_type": "application/json", # Виправлено дублювання
500
+ }
501
+
502
  # Ініціалізація моделі
503
+ model = genai.GenerativeModel(
504
+ model_name="gemini-1.5-flash",
505
+ generation_config=generation_config,
506
+ system_instruction=SYSTEM_PROMPT,
507
  )
508
 
 
 
509
  content = LEGAL_POSITION_PROMPT.format(
510
  court_decision_text=court_decision_text,
511
  comment=comment_input if comment_input else "Коментар відсутній"
512
  )
513
 
514
+ # Створення сесії чату
515
+ chat_session = model.start_chat(history=[])
 
 
 
516
 
517
+ response = chat_session.send_message(content)
 
518
 
519
  # Обробка відповіді
520
+ parsed_response = json.loads(response.text)
521
 
522
  # Перевірка наявності обов'язкових полів
523
  if all(field in parsed_response for field in ["title", "text", "proceeding", "category"]):
 
525
 
526
  return {
527
  "title": "Error: Missing required fields in response",
528
+ "text": response.text,
529
  "proceeding": "Unknown",
530
  "category": "Error"
531
  }
 
533
  except json.JSONDecodeError:
534
  return {
535
  "title": "Error parsing response",
536
+ "text": response.text,
537
  "proceeding": "Unknown",
538
  "category": "Error"
539
  }
 
546
  }
547
 
548
 
549
+
550
+
551
  def create_gradio_interface():
552
  async def generate_position_action(url):
553
  try:
requirements.txt CHANGED
@@ -12,3 +12,4 @@ beautifulsoup4
12
  nest-asyncio
13
  boto3
14
  python-dotenv
 
 
12
  nest-asyncio
13
  boto3
14
  python-dotenv
15
+ google-generativeai>=0.8.2