go to post Elijah Cotterrell · Aug 29 Thanks @Brenna Quirk - also very interested to hear about alternative RAG setups from the community. We used LangChain and OpenAI for these videos, but you can also use other RAG frameworks like Llamaindex, or agent frameworks like AutoGen, MetaGPT and LangGraph, plus quite a few other LLMs and fine-tuned models if you have the hardware :)
go to post Elijah Cotterrell · Aug 29 Thanks @Anastasia Dyubaylo ! These were some great projects looking at how far we could push IRIS performance with very fast persistence, efficient indexing, and caching for 100s of queries and joins per second.
go to post Elijah Cotterrell · Oct 23, 2023 Hi Rochdi, If directly working with globals in a live system, I would strongly advise you to use the LOCK command to set and release locks. It is possible that if your process has not stopped, all the locks are still being retained. Documentation: https://docs.intersystems.com/iris20232/csp/docbook/Doc.View.cls?KEY=RCO... Consider using the following from the documentation: LOCK +lockname applies a lock on the specified lock name(s) without unlocking any previous locks. This allows you to accumulate different locks, and allows you to apply incremental locks to the same lock. LOCK -lockname performs an unlock operation on the specified lock name(s). Unlocking decrements the lock count for the specified lock name; when this lock count decrements to zero, the lock is released. Additionally, using LOCK without arguments, will release all active locks in the namespace held by the current process.
go to post Elijah Cotterrell · Oct 16, 2023 Embedded Python is only available from IRIS 2021.2. If you are running on 2020.1, you won't have access to %SYS.Python, and cannot make use of Embedded Python from ObjectScript classes.
go to post Elijah Cotterrell · Aug 17, 2023 Hi Yone, Message viewer generates SQL queries when you perform a "Search". This means that the GetAt() methods you typically use for Lists won't function properly in the criteria menu. However, if you simply want to retrieve lists containing "V08984", try using the 'Contains' operator: This way you are treating the List property (IMOVIMIENTOS) as a String, and simply searching for your sub-string within it. If you are interested in learning about how to perform SQL queries against List or Array properties, see this documentation about their SQL projections. If you are interested in finding the 1st, or 2nd etc element of a List, then you can try using the Match operator, see Matching documentation. There may be better ways of using these operators, but this is the simplest solution I can think of. It's worth noting that the SQL projected fields of your class will look like this: So pattern matching may be your best option for working with multiple list elements. Hope that helps!
go to post Elijah Cotterrell · Aug 14, 2023 Hi Ashok, could you give some more context for what you want to achieve? If you simply want an instance method that can do something to any property of a persistent class, you could do something like: Class Package.Data Extends %Persistent { Property StringProp As %String; Property IntegerProp As %Integer; Method TestAnyProp(propName As %String) As %Boolean { if $PROPERTY($THIS, propName) = "" quit 0 quit 1 } } But if you specifically want the propSomething format of generated methods, Eduard's solution may be more appropriate. Worth noting that property accessors like propGet() and propSet() can be overridden.
go to post Elijah Cotterrell · Mar 7, 2023 This looks very interesting. I'll investigate and will update if / when I find a solution with your framework.