Spaces:
Running
Running
add genai
Browse files- config.py +0 -11
- main.py +83 -27
- 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 |
-
|
435 |
-
|
436 |
-
|
|
|
|
|
|
|
|
|
437 |
|
438 |
-
Returns:
|
439 |
-
dict: Словник з правовою позицією або повідомленням про помилку
|
440 |
-
"""
|
441 |
try:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
442 |
# Ініціалізація моделі
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
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 |
-
|
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.
|
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.
|
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.
|
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
|